1、grep
-
命令格式為:
grep
"搜尋的字串"
檔名
1)基礎
2)例項
grep -c "xx" text.log
2、sed
1)基本概念
sed [-nefri]
'命令'
文字
cat
文字 | sed [-nefr]
'命令'
echo'.....'
|sed [-nefr]
'命令'
2)選項(nefri)
3)命令(acdipynNs)
[root@localhost sed]
# cat message
1a
2b
3c
4d
5e
6f
abcdABCD
#將message檔案中每一行下邊都插入新增一行內容是A
sed
'a A'
message
#將message檔案中1-2行的下邊插入新增一行內容是A
sed
'1,2a A'
message
#將message檔案中1-2行的下邊分別新增3行,3行內容分別是A、B、C,這裡使用了\n,插入多行內容都可以按照這種方式來實現。
sed
'1,2a A\nB\nC'
message
#將message檔案中每一行上邊都插入新增一行內容是A
sed
'i A'
message
#將message檔案中1-2行的上邊插入新增一行內容是A
sed
'1,2i A'
message
#將message檔案中1-2行的上邊分別新增3行,3行內容分別是A、B、C,這裡使用了\n,插入多行內容都可以按照這種方式來實現
sed
'1,2i A\nB\nC'
message
#將message檔案中所有的行內容都分別替換為A行內容
sed
'c A'
message
#將message檔案中1-2行的內容替換為A,注意這裡說的是將1-2行所有的內容只替換為一個A內容,也就是1-2行內容變成了一行,定址如果連續就是這種情況
sed
'1,2c A'
message
#將message中1-2行內容分別替換為了A,需要在替換內容上手動加換行\n,這樣當然也可以將一行內容替換為多行內容
sed
'1,2c A\nA'
message
#將message所有行全部刪除,因為沒有加定址表示式,所以平時如果需要刪除指定行內容,需要在子命令前加定址表示式
sed
'd'
message
#將message檔案中1-3行內容刪除
sed
'1,2d'
message
#把message中所有a字元替換為A符號,所有b字元替換為B符號
sed
'y/aB/Ab/'
message
#將指定行的上邊顯示行號
sed
'1,2='
message
#將r.txt檔案內容讀取並插入到message檔案第1行的下邊
sed
'1r r.txt'
message
-
flags
flags | 說明 |
---|---|
n | 可以是1-512,表示第n次出現的情況進行替換 |
g | 全域性更改 |
p | 列印模式空間的內容 |
w file | 寫入到一個檔案file中 |
#b全域性換成x
sed
's/b/x/g'
message
4)例項
sed -i
'1i\a new line'
text.txt
sed -i
'3a \a new line'
text
3、awk
1)基本概念
awk [選項] '匹配規則和處理規則 ' [處理文字路徑]
-
匹配規則主要是:正則表示式、字串
-
處理規則主要是:設定變數、設定陣列、定義函式(用的比較少)、陣列迴圈、加減乘除運算、字串拼接
awk [選項]
'BEGIN{定義1;定義2;}/模式/{操作1;操作2}END{操作1;操作2}'
file1 file2
選項:如
-F:
指定分隔符為:BEGIN{} : BEGIN是在awk處理文字之前執行/模式/ : 使用的匹配規則,模式為正則或者字串{} :迴圈(每次只處理一行資料),如
{print $1}
列印第一列END{} :當所有的處理全部執行完畢之後,執行END中的相關操作
2)運算子:~、==、!=、>等
#當前行匹配以a開頭成功時則執行後面的列印
awk
'/^a/ {print $1}'
awk
'$n~/^1/ {print $1}'
3)BEGIN和AND:
BEGIN
END
4)選項
引數 | 解釋 |
---|---|
-F | 指定分割欄位符 |
-v | 定義或修改一個awk內部的變數 |
-f | 從指令碼檔案中讀取awk命令 |
5)常見變數:
內建變數 | 解釋 |
---|---|
FS | 預設輸入列分隔符(空格和tab) |
OFS | 預設輸出列分隔符(空格) |
NF | 每行有幾段(列)(print $NF代表列印最後一列) |
RS | 預設輸入行分隔符(\n) |
ORS | 預設輸出行分隔符(\n) |
FILENAME | 當前所操作檔名稱 |
NR | 讀取每行時當前的行號(對於合併檔案來說,不同檔案行號連續顯示) |
FNR | 讀取每行時顯示當前的行號(對於合併檔案來說,不同檔案行號不連續顯示) |
6)判斷:
7)例項
ps |awk
'{print $2}'
awk -F
":"'{print $1,$2}'
/etc/passwd
awk -F
":"'{print $1"--"$2}'
/etc/passwd
awk -F
"[:,]"'{print $1"--"$2}'
/etc/passwd
docker ps |awk
'/^d/ {print $1}'
docker ps |awk
'$n~/^d/ {print $1}'
awk
'BEGIN{FS="[:,]"}{print $1}'
/etc/passwd
awk
'BEGIN{FS="[:,]";line=1}{print $line}'
/etc/passwd
awk
'BEGIN{FS="[,:]";sum=0}{sum+=$3;print sum}END{print "sum=",sum}'
/etc/passwd
awk '{pring FILENAME}' /etc/passwd