Linux文本三劍客

来源:https://www.cnblogs.com/misakivv/p/18181208
-Advertisement-
Play Games

目錄一、文本搜索工具--grep1、簡介2、工作原理3、語法格式4、選項介紹5、實例測試5.1、-i選項5.2、-v選項5.3、-n選項5.4、-c選項5.5、-o選項5.6、-B選項5.7、-A選項5.8、-C選項5.9、-w選項5.10、-E選項5.11、-e選項二、流編輯器--sed1、簡介2 ...


目錄

一、文本搜索工具--grep

1、簡介

grep(Global search REgular expression and Print out the line.)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,並預設輸出匹配行。Unix的grep家族包括grep、egrepfgrep。Windows系統下類似命令FINDSTR

grep的全稱中可以瞭解到,grep是一個可以利用""正則表達式"進行"全局搜索"的工具,grep會在文本文件中按照指定的正則進行全局搜索,並將搜索出的行列印出來。

2、工作原理

  • grep讀取輸入數據,這可以是來自一個或多個文件的內容,也可以是管道(stdin)傳入的數據。
  • 它根據提供的模式(pattern),這個模式可以是簡單字元串或複雜的正則表達式,逐行匹配文本。
  • 當一行文本與模式匹配時,該行會被輸出到標準輸出(stdout),預設情況下不改變原始文件。
  • 如果沒有找到匹配項,grep可能不會輸出任何內容,具體行為取決於使用的選項。

3、語法格式

grep [選項] PATTERN [文件列表]
  • grep:命令名稱,用於搜索含有特定模式的文件內容。
  • [選項]:可選參數,用來控制搜索的方式、輸出格式等。常見的選項包括-i(忽略大小寫)、-v(反向匹配)、-n(顯示行號)、-r-R(遞歸搜索)、-w(精確單詞匹配)等。
  • PATTERN:必填項,表示要搜索的模式或正則表達式。這可以是一個簡單的文本字元串或複雜的正則表達式,用於匹配文件中的內容。
  • [文件列表]:可選,指定要搜索的一個或多個文件名。如果不提供文件名,grep預設從標準輸入(stdin)讀取數據,這意味著你可以通過管道(|)將其他命令的輸出傳遞給grep進行搜索。

4、選項介紹

選項 描述
-i 忽略大小寫進行匹配。
-v 反轉匹配,輸出不匹配指定模式的行。
-n 在每行匹配之前顯示行號。
-c 計算匹配行的總數,而不是列印匹配行。
-o 只列印匹配的內容
-l 只列出包含匹配項的文件名,對於每個匹配的文件只輸出一次。
-L 列出不包含匹配項的文件名。
-B 列印匹配的前幾行
-A 列印匹配的後幾行
-C 列印匹配的前後幾行
-w 匹配整個單詞,即模式必須與整個單詞相匹配,而不是單詞的一部分。
-r-R 遞歸搜索指定目錄下的所有文件。
-E 使用擴展正則表達式(ERE)。
-F 將模式作為固定字元串對待,不解釋為正則表達式。
-q 靜默模式,不輸出任何內容到屏幕,僅返回退出狀態碼。常用於腳本中判斷是否存在匹配。
-e 多點操作

5、實例測試

測試文檔 test

#!/bin/bash

set -euo pipefail

NGINX_VERSION="1.18.0"
INSTALL_DIR="/apps/NGINX"

#echo "開始安裝 Nginx $NGINX_VERSION..."
#echo "1. 安裝依賴包..."
if yum list installed $PACKAGE_LIST &> /dev/null; then
    echo "依賴包已安裝。"
else
    echo "正在安裝依賴包:$PACKAGE_LIST"

    yum -y install $PACKAGE_LIST > /dev/null
    echo "依賴包安$裝完成。"
echo "2. 創建非登錄用戶 NgInX..."
if id -u NgInX &> /dev/null; then
    echo "NgInX 源碼下載完成。"
echo "5. 設置#目錄#許可權..."
chown -R nginx.NGINX "$INSTALL_DIR" > /dev/null
echo "6. 創建符號鏈#接..."
ln -s "$INSTALL_DIR/sbin/NgInX" /usr/bin/ > /dev/null
echo "符號鏈$接創建完成$。"
[Install]
[install]
sed -i '/^#pid.*$/a pid        /apps/nginx/run/nginx.pid;' /apps/NGINX/conf/NgInX.conf > /dev/null
echo "NgInX 安$裝完成。"

5.1、-i選項

列印出所有的nginx,無論大小寫

grep -i 'nginx' test

image-20240507114319716

5.2、-v選項

列印出所有不包含null的行

grep -v 'echo' test

image-20240507115029917

5.3、-n選項

列印所有不包含nginx大小寫,並且顯示所在行

grep -inv 'nginx' test

image-20240507115514967

5.4、-c選項

列印所有不包含echo大小寫,並且計算匹配的行的總數

grep -ivc 'echo' test

image-20240507151526012

5.5、-o選項

只列印匹配到的NgInX字元串

grep -o 'NgInX' test

image-20240507151957888

5.6、-B選項

列印匹配開始安裝的前三行

grep -B3 '開始安裝' test

image-20240507152251624

5.7、-A選項

列印匹配開始安裝的後三行

grep -A3 '開始安裝' test

image-20240507152443758

5.8、-C選項

列印匹配開始安裝的前後兩行

grep -C2 '開始安裝' test

image-20240507152616566

5.9、-w選項

列印完全匹配NgInX字元串的行

grep -w 'NgInX' test

5.10、-E選項

過濾test文件中所有的空行、註釋#

egrep -v '^#|^$' test
grep -Ev '^#|^$' test

image-20240507193250707

5.11、-e選項

同時查找包含"安裝"和"NgInX"的行

grep -e '安裝' -e 'NgInX' test

image-20240507195402507

二、流編輯器--sed

sed操作文件前記得備份源文件,或者先使用預設的-e參數操作

1、簡介

sed全稱為Stream EDitor,行編輯器,同時也是一種流編輯器。是一個強大的非互動式命令行工具,主要用於自動地對文本文件或者輸入流進行基於模式的查找、替換、刪除、插入等操作。

2、工作原理

  1. 讀取行sed逐行讀取輸入文件(或從標準輸入接收到的數據)。每次讀取一行內容,不會一次性將整個文件載入到記憶體中,這使得sed在處理大文件時效率很高。
  2. 模式空間:讀取的每一行文本會被放置到一個稱為“模式空間”(pattern space)的緩衝區中。模式空間是sed進行文本處理的主要場所,所有的編輯命令都在這裡對文本行進行操作。
  3. 執行命令:根據提供的命令腳本,sed會對模式空間中的文本行進行匹配、替換、刪除等操作。這些命令可以是簡單的正則表達式匹配,也可以是複雜的邏輯判斷和操作序列。
  4. 輸出處理結果:處理完一行後,sed會將模式空間中的內容輸出到屏幕(或重定向的輸出文件),然後清空模式空間(除非使用特殊命令如HGND等操作了保留空間hold space),準備處理下一行。這個過程重覆,直到所有行都被處理完畢。
  5. 保留空間:除了模式空間,sed還有一個稱為“保留空間”(hold space)的緩衝區,它可以用來臨時存儲數據,實現更複雜的文本處理邏輯,比如在多行間傳遞數據。
  6. 非破壞性處理:預設情況下,sed不對原文件進行修改,而是將處理後的結果輸出到標準輸出。如果你想修改原文件,可以使用-i選項進行就地編輯。
  7. 退出處理:當文件的所有行都被成功處理並輸出後,sed完成其任務並退出。

3、語法格式

  • sed的命令格式:

    • sed [option] 'sed command' 輸入文件
      
  • sed的腳本格式

    • sed [option] ‐f 'sed script' 輸入文件
      

4、選項介紹

選項 描述
-n 抑制自動列印模式空間的內容,僅列印通過命令顯式指定的內容。
-e 添加腳本到執行的命令列表中,允許多個-e選項串聯多個腳本。
-f 從指定的腳本文件中讀取命令並執行。
--follow-symlinks 處理文件時跟隨符號鏈接。
-i 直接修改文件內容。
-c 在使用-i模式時,使用複製而非重命名來處理文件。
-b 對於某些平臺,打開文件時使用二進位模式,但實際上不起作用。
-l N l命令指定期望的行寬包裝長度。
--posix 禁用所有GNU擴展,使用POSIX相容模式。
-r 使用擴展正則表達式。
-s 將每個文件視為獨立的,而非一個連續的長流。
-u 減少從輸入文件載入的數據量,並更頻繁地刷新輸出緩衝區,適合處理大文件或需要即時輸出的情況。
-z 使用NUL字元而不是換行符作為行分隔符。
--help 顯示幫助信息並退出。
--version 輸出版本信息並退出。

5、動作介紹

動作 描述
= 列印當前處理的行號。
a \text 在當前行之後追加文本text,文本中的換行需用\轉義。
i \text 在當前行之前插入文本text,文本中的換行需用\轉義。
q [exit-code] 立即退出sed腳本,可選指定退出代碼。
Q [exit-code] GNU擴展,立即退出sed腳本,不處理剩餘輸入,可選指定退出代碼。
r filename 讀取文件filename的內容並追加到模式空間處理後的輸出中。
R filename GNU擴展,讀取文件filename的一行並追加到模式空間處理後的輸出中,每次調用讀取一行。
{ ... } 定義一個命令塊,其中可以包含多條sed命令。
b label 無條件跳轉到標簽label處,或如果沒有指定標簽,則跳到腳本末尾。
c \text text替換當前模式空間中的行,文本中的換行需用\轉義。
d 刪除模式空間中的當前行,然後開始處理下一行。
D 如果模式空間中沒有換行符,就像執行了d命令;如果有換行符,刪除至第一個換行符前的內容並重新開始處理。
h H 複製模式空間內容到保持空間(h)或追加到保持空間(H)。
g G 用保持空間的內容替換模式空間內容(g)或追加保持空間內容到模式空間(G)。
l 以一種視覺上不易混淆的形式列出模式空間中的當前行。
l width GNU擴展,按指定寬度width折行顯示模式空間中的當前行。
n N 讀取下一行到模式空間(n)或追加下一行到模式空間而不啟動新迴圈(N)。
p 列印當前模式空間的內容。
P 列印模式空間中的內容直到第一個換行符。
s/regexp/replacement/ 替換與正則表達式regexp匹配的部分為replacement&在替換中表示匹配的文本,\1\9表示捕獲組。
t label 如果最近的替換成功,則跳轉到標簽label
T label GNU擴展,如果最近的替換未成功,則跳轉到標簽label
w filename 將模式空間的內容寫入文件filename
W filename GNU擴展,將模式空間的第一行寫入文件filename
x 交換模式空間與保持空間的內容。
y/source/dest/ 對模式空間中的字元進行轉換,將source中每個字元轉換為dest中對應位置的字元。

6、sed的增刪改查

以下所有的命令皆不使用-i選項修改僅供展示

測試文檔:

[root@localhost ~]# cat /etc/passwd > test01
[root@localhost ~]# cat test01
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

6.1、增

"a":apend,追加,追加文本到指定行後。

"i":insert,插入,插入文本到指定行前。

6.1.1、在test01文件的第一行後面追加3行數字
  • sed '1a 111\n222\n333' test01
    
  • image-20240507211303076

6.1.2、在行首添加一行數字
  • sed '1i 111' test01
    
  • image-20240507211930773

6.2、刪

"d":delete,刪除文本

6.2.1、刪除第一行
  • nl test01 | sed '1d'
    
  • image-20240507223725343

6.2.2、刪除2-10行
  • nl test01 | sed '2,10d'
    
  • image-20240507223830239

6.2.3、刪除全文
  • sed 'd' test01
    
6.2.4、刪除匹配到/sbin/nologin的行
  • sed '/\/sbin\/nologin/d' test01
    
  • image-20240507220237519

6.2.5、刪除以bin開頭的行
  • sed '/^bin/d' test01
    
  • image-20240507221557353

6.2.6、刪除第三行到末尾
  • nl test01 | sed '3,$d'
    
  • image-20240507223926271

6.2.7、刪除第1-3行以外的行
  • nl test01 | sed '1,3!d'
    
  • image-20240507224022667

6.2.8、去除文件中的空行和註釋行
  • sed -e '/^#/d' -e '/^$/d' test01
    

6.3、改

"c":change,替換

6.3.1、將第一行替換為 hello sed
  • sed '1c hello sed' test01
    
  • image-20240507223423544

6.4、文本替換

  • 選項:

    • "s": 這是sed中最常用的命令,代表替換(substitute)。當你希望在文件中查找並替換某些文本時,就會用到這個命令。例如,s/old/new/ 表示將每一行中首次出現的"old"字元串替換為"new"。這裡的"old"是你要查找的目標文本,而"new"是你希望替換成的新文本。
    • "g": 這是一個修飾符,用於指示sed進行全局替換(global)。如果不加"g",sed只會在每行的第一個匹配處進行替換。加上"g"後,sed會在同一行內所有匹配到的目標內容都進行替換。所以,s/old/new/g 表示將每行中所有出現的"old"都替換為"new"。
  • 替換語法(-i選項慎用):

    • sed -i 's/目標內容/替換內容/g' file
      
    • #本質上與上面的命令差不多,更改分隔符為#可以避免轉義的複雜性,使命令更易讀
      sed -i '#/目標內容#替換內容/g' file
      
6.4.1、將所有的nologin替換為login
  • sed 's/nologin/login/g' test01
    
  • image-20240507225355325

6.4.2、將所有的/sbin/nologin 替換為/bin/login
  • sed '/\/sbin\/nologin/s#/sbin\/nologin#/bin/login#g' test01
    
  • image-20240507231422891

6.4.3、匹配以mail開頭的行,將該行所有的mail替換為gmail
  • sed '/^mail/{s#mail#gmail#g}' test01
    
  • image-20240507231749333

6.5、查

"p":print,列印,輸出指定內容

配合-n取消預設輸出

6.5.1、顯示第二行(包括模式空間文件)
  • sed '2p' test01
    
  • image-20240507232214542

6.5.2、只顯示第二行
  • sed -n '2p' test01
    
  • image-20240507232311129

三、文本處理工具--awk

1、簡介

awk不僅僅是 linux系統中的一個命令,而且是一種編程語言,可以用來處理數據和生成報告(excel)。處理的數據可以是一個或多個文件,可以是來自標準輸入,也可以通過管道獲取標準輸入,awk可以在命令行上直接編輯命令進行操作,也可以編寫成awk程式來進行更為複雜的運用。

2、工作原理

20170719154838100

  • 1、通過關鍵字 BEGIN 執行 BEGIN 塊的內容,即 BEGIN 後花括弧 {} 的內容。
  • 2、完成 BEGIN 塊的執行,開始執行body塊。
  • 3、讀入有 \n 換行符分割的記錄。
  • 4、將記錄按指定的域分隔符劃分域,填充域,$0 則表示所有域(即一行內容),\(1** 表示第一個域,**\)n 表示第 n 個域。
  • 5、依次執行各 BODY 塊,pattern 部分匹配該行內容成功後,才會執行 awk-commands 的內容。
  • 6、迴圈讀取並執行各行直到文件結束,完成body塊執行。
  • 7、開始 END 塊執行,END 塊可以輸出最終結果。

3、語法格式

  • awk指令是由模式,動作,或者模式和動作的組合組成。
  • 模式即pattern,可以類似理解成sed的模式匹配,可以由表達式組成,也可以是兩個正斜杠之間的正則表達式。比如NR==1,這就是模式,可以把他理解為一個條件。
  • 動作即action,是由在大括弧裡面的一條或多條語句組成,語句之間使用分號隔開。
awk [options] 'pattern {action}' file

awk處理的內容可以來自標準輸入(<) ,一個或多個文件或者管道

1639072-20190520142743645-776696011

Z

4、選項介紹

選項 描述
-b, --characters-as-bytes 將所有輸入數據視為單位元組字元,忽略多位元組字元處理的locale信息。
-c, --traditional 運行於相容模式,gawk表現得與UNIX awk一致,不識別GNU特有的擴展。
-C, --copyright 輸出GNU版權信息併成功退出。
-d[file], --dump-variables[=file] 輸出所有全局變數的排序列表及其類型、最終值至指定文件或預設的awkvars.out。
-e program-text, --source program-text 使用命令行提供的program-text作為AWK程式源代碼。
-E file, --exec file 類似於-f,但作為最後一個處理的選項,適合用於避免CGI應用中URL傳遞選項或源代碼。禁用命令行變數賦值。
-f program-file, --file program-file 從指定文件讀取AWK程式源碼而非命令行參數。可多次使用。
-F fs, --field-separator fs 使用fs作為輸入欄位分隔符。
-g, --gen-pot 掃描並解析AWK程式,生成包含所有可本地化字元串的GNU .pot文件。程式本身不執行。
-h, --help 輸出可用選項的簡短摘要後立即退出。
-L [value], --lint[=value] 提供關於可疑或非便攜構造的警告,可選fatal使警告成為錯誤,invalid僅報告實際無效項。
-n, --non-decimal-data 識別輸入數據中的八進位和十六進位值,需謹慎使用。
-N, --use-lc-numeric 強制gawk在解析輸入數據時使用locale的十進位點字元。
-o output-file 指定輸出的文件名
-O, --optimize 啟用程式內部表示的優化,當前包括常量摺疊。
-p[prof_file], --profile[=prof_file] 將性能分析數據發送到指定文件,預設為awkprof.out。
-P, --posix 啟用相容模式,並施加額外限制以符合POSIX標準。
-r, --re-interval 允許在正則表達式匹配中使用區間表達式。
-R, --command file (Dgawk專用) 從文件讀取存儲的調試器命令。
-S, --sandbox 在沙盒模式下運行gawk,禁用系統調用、getline輸入重定向、print/printf輸出重定向等。
-t, --lint-old 提供關於不相容原始Unix awk結構的警告。
-V, --version 輸出gawk的版本信息。
-- 標誌選項結束,允許後續參數以"-"開頭,符合POSIX約定。
-v var=val, --assign var=val 在程式執行前將變數var賦值為val

5、awk運算符

5.1、算數運算符

算術運算符 描述
+ 加法
- 減法
* 乘法
/ 除法
% 取模(求餘數)
+= 加等於
-= 減等於
*= 乘等於
/= 除等於
%= 取模等於
** 冪運算(乘方)

5.2、關係運算符

關係運算符 描述
== 等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於

5.3、邏輯運算符

邏輯運算符 描述
&& 邏輯與
|| 邏輯或
! 邏輯非

5.4、賦值運算符

賦值運算符 描述
= 簡單賦值
+= 加法賦值
-= 減法賦值
*= 乘法賦值
/= 除法賦值
%= 取模賦值
**= 冪賦值(乘方賦值)

5.5、特殊運算符

特殊運算符 描述
? : 條件運算符(三目運算符)
~ 匹配正則表達式(模式匹配)
!~ 不匹配正則表達式

6、awk常用的內置變數

內置變數 描述
$0 當前記錄
\\(1-\)n 當前記錄的第n個欄位
ARGC 命令行參數的數量,不包括awk命令本身
ARGV 包含命令行參數的數組
FILENAME 當前輸入文件的名稱
FNR 當前記錄號,在處理多個文件時,對於每個文件單獨計數
NR 總的輸入記錄號,從1開始,跨多個文件累加
NF 當前行中的欄位數,即分割後數組的元素數量
FS 輸入欄位分隔符,預設為空格或製表符
OFS 輸出欄位分隔符,預設為空格或製表符,用於列印時分隔欄位
RS 輸入記錄分隔符,預設為換行符,用於界定不同的記錄
ORS 輸出記錄分隔符,預設為換行符,用於列印時分隔記錄
RSTART 匹配字元串的起始位置,由match函數設置
RLENGTH 匹配字元串的長度,由match函數設置
ENVIRON 環境變數關聯的關聯數組,可以訪問外部環境變數

7、awk的正則

正則表達式 展示 功能 解釋及舉例
. 匹配任意單個字元(不包括換行符) /./ 匹配任何單字元的行,如 "a", "b", "1", "!" 等。
^ 脫字元 匹配字元串的開始 /^Hello/ 匹配以 "Hello" 開頭的行。
$ 美元符號 匹配字元串的結束 /world$/ 匹配以 "world" 結尾的行。
[abc] 字元集 匹配字元集中的任意一個字元 /[abc]/ 匹配含有 "a"、"b" 或 "c" 的行。
[^abc] 否定字元集 匹配不在字元集中的任意一個字元 /[^abc]/ 匹配不含 "a"、"b" 或 "c" 的行。
[a-z] 字元範圍 匹配指定範圍內的任意字元 /[a-z]/ 匹配小寫字母。
\d 數字 匹配任何數字(等價於 [0-9]) /\\d+/ 匹配一個或多個連續數字。
\s 空白字元 匹配任何空白字元(空格、tab、換行等) /\\s+/ 匹配一個或多個空白字元。
\w 單詞字元 匹配字母、數字或下劃線(等價於 [a-zA-Z0-9_]) /\\w+/ 匹配一個或多個單詞字元組成的字元串。
\W 非單詞字元 匹配非單詞字元(等價於 [^a-zA-Z0-9_]) /\\W+/ 匹配一個或多個非單詞字元。
* 星號 重覆前面的子表達式零次或多次 /a*b/ 匹配任意數量的 "a" 後跟一個 "b",如 "b", "ab", "aab", "aaab"。
+ 加號 重覆前面的子表達式一次或多次 /a+b/ 匹配至少一個 "a" 後跟一個 "b",如 "ab", "aab", "aaab"。
? 問號 重覆前面的子表達式零次或一次 /a?b/ 匹配 "b" 或者 "ab"。
重覆次數 重覆前面的子表達式恰好n次 /a{2}/ 匹配 "aa"。
至少重覆n次 重覆前面的子表達式至少n次 /a{2,}/ 匹配至少兩個 "a" 如 "aa", "aaa", "aaaa" 等。
重覆n到m次 重覆前面的子表達式n到m次(包括n和m) /a{2,3}/ 匹配 "aa" 或 "aaa"。
(...) 分組 定義子表達式以便引用或重覆 /(ab)+/ 匹配一個或多個 "ab" 連續出現,如 "ab", "abab", "ababab"。
| 或者 匹配兩種或多種可能的模式之一 匹配左邊或右邊的子表達式之一 `/apache

8、BEGIN和END模塊

BEGIN只執行一次並且執行在主體代碼塊之前。

END只執行一次並且執行在主體代碼塊之後。

BEGIN可以拋開文件單獨執行,結果類似於echo而END不可以。

BEGIN中沒有文件的讀取變數而END是有的。

但END中的$0是awk處理到最後的文本樣式。

8.1、BEGIN模塊

8.1.1、輸出標題行Username shell,以及對應的用戶和shell類型
awk -F ":" 'BEGIN{print "Username shell"} {print $1,$NF}' test01

image-20240508224934872

8.2、END模塊

8.2.1、列印對應的用戶和shell類型,最後再列印end of file
awk -F ":" '{print $1,$NF} END{print "out of file"}' test01

image-20240508230602631

9、實例測試

測試文檔依然是test01

9.1、列印test01內容並附帶行號

awk '{print NR,$0}' test01

image-20240508210705987

9.2、只列印第二行

awk 'NR==2{print}' test01

image-20240508211902207

9.3、列印二到四行

awk 'NR>=2 && NR<=4{print}' test01
awk 'NR>1 && NR<5{print}' test01

image-20240508213006162

9.4、只列印第二行和第四行

awk 'NR==2 || NR==4{print}' test01

image-20240508213615980

9.5、匹配以root開頭的行

awk '/^root/{print}' test01

image-20240508215454499

9.6、列印test01文件中用戶和對應的shell類型

awk -F ":" '{print $1,$NF}' test01

image-20240508221936335

四、綜合案例

1、查找用戶名為root的行,並列印其所有的欄位

grep '^root:' test01 | awk -F: '{print "Username: "$1", UID: "$3", GID: "$4", Comment: "$5", Home Dir: "$6", Shell: "$7}'

image-20240508231511844

2、統計不同shell類型的用戶數量

grep -E '/bin/bash$|/sbin/nologin$' test01 | awk -F: '{print $7}' | sort | uniq -c

image-20240508232120435

3、獲取系統的ip地址

ifconfig | sed -n '/netmask/p' | sed 's/^.*inet //g' | sed 's/netmask.*$//g' | sed -n '1p'
ip a|sed -n '/inet /p'|sed 's/^.*inet //g'|sed 's/\/.*$//g'|sed -n '2p'
ip a | grep -oP 'inet \K[\d.]+' | sed -n '2p'
ip a | grep -o -E "([0-9]{1,3}[.]){3}[0-9]{1,3}" | sed -n '2p'
ifconfig ens33|awk -F [" "]+ 'NR==2{print $3}'
ifconfig ens33 | awk 'BEGIN{FS="[[:space:]:]+"} NR==2{print$3}'

image-20240508232905839


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄系統IO介面說明概念解釋標準IO和系統IO的區別常用系統IO函數介紹打開文件關閉文件文件讀取文件寫入位置偏移 系統IO介面說明 概念解釋 由於Linux系統下“一切皆文件”,也就是Linux系統下的數據和程式都是以文件的形式存儲的,所以Linux內核會提供一組操作文件的函數介面,這組函數介面也被 ...
  • UART UART 1. 什麼是UART? 2. 硬體接線 3. 數據幀格式 4. 波特率 4.1. 波特率和比特率的定義 4.2. 波特率和比特率之間的關係 4.3. 波特率的作用 5. UART通信分析實踐 5.1. 發送"Hello, World!",請寫出數據幀。 5.2. 每秒傳輸多少個字 ...
  • 時序圖 時序圖 1. 參考資料 2. 基礎 3. 符號 3.1. 斜線形式的上升沿、下降沿 3.2. Either or 信號 3.3. 波形省略 3.2.1. 虛線 3.2.2. 波浪號 3.4. 地址&數據表示 4. 實例-WT588F語音晶元時序圖 4.1. 瞭解背景 4.2. 分析 4.3. ...
  • 首先來看下什麼是漏桶演算法和令牌桶演算法 Nginx並不直接實現漏桶演算法或令牌桶演算法,但這些演算法在控制網路流量和請求速率方面非常有用。這些演算法通常在網路編程、API服務、負載均衡等領域中使用,以確保系統的穩定性和性能。 漏桶演算法(Leaky Bucket): * 漏桶演算法用於限制數據的傳輸速率。它可以將 ...
  • 文件IO 筆試題 作業:設計程式,獲取當前系統時間,把時間轉換為特定格式”yy年mm月dd日 星期x tt:mm:ss”,並每隔1s寫入到本地磁碟中一個叫做log.txt的文本中,如果文本不存在則創建。 代碼: /******************************************* ...
  • 目錄標準IO練習題題目:分析:代碼展示結果展示總結知識擴展time()函數localtime()函數 標準IO練習題 題目: 設計程式,獲取當前系統時間,把時間轉換為特定格式”yy年mm月dd日 星期x tt:mm:ss”,並每隔1s寫入到本地磁碟中一個叫做log.txt的文本中,如果文本不存在則創 ...
  • 目錄文件操作介面說明標準IO標準IO函數介紹打開文件:fopen()fopen使用相關知識補充關閉文件:fclose讀取數據字元讀取(fgetc)按行讀取按塊讀取寫入文件字元寫入字元串寫入按塊寫入讀取文件位置設置位移獲取位移格式訪問 文件操作介面說明 Linux系統為了簡化不同類型文件的操作流程,在 ...
  • 目錄電腦的組成部分硬體系統軟體系統文件系統Linux系統的目錄根文件系統說明目錄的結構分析Linux 的文件類型 電腦的組成部分 硬體系統 電腦的硬體主要是由五部分組成:控制器、運算器、存儲器、輸入設備、輸出設備。 運算器和控制器的總稱是中央處理器(CPU),指的是電腦中對信息進行高速運算處 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...