寶付揭秘Linux支付命令操作之grep、sed、awk

一流湧進發表於2019-09-16

一、grep

grep命令主要用於文字內容的查詢。它支援正規表示式查詢,命令格式為:

 grep [option] pattern filename

例如:在filename文字中查詢包含”text”的行:

 grep "text" filename

這條命令預設只輸出匹配的文字行

option為-o時,命令列只輸出匹配的文字
option為-v時,命令列只輸出沒有匹配的文字行
option為-R -r時,匹配目錄下的所有檔案 二、sed

sed命令主要用於文字內容的編輯。預設只處理模式空間,不處理原資料,而且sed是針對一行行資料來進行處理的。

sed的命令格式為:

sed [option] 'command' filename

option常用選項有以下:

-n:使用安靜(silent)模式。
 在一般sed的用法中,所有來自stdin的資料一般都會被列出到終端上。
 但如果加上-n引數後,則只有經過sed特殊處理的那一行(或者動作)才會被列出來。
-e:直接在命令列模式上進行sed的動作編輯。
-i:直接修改讀取的檔案內容,而不是輸出到終端。

command可以分為以下幾種:

a:追加,a的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
i:插入,i的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)
d:以行為單位的刪除
c:以行為單位的替換,c的後面可以接字串
s:在行中搜尋並替換
p:以行為單位的顯示,通常p會與引數sed -n一起執行

例如:

1、在filename文字最後一行追加hello world:

 sed '$a hello world' filename

2、在filename文字第一行插入hello world:

sed '1i hello world' filename

3、既要在最後一行追加hello world,又要在第一行插入hello world:

 sed -e '$a hello world' -e '1i hello world' filename

另外,sed比較常用的就是文字替換,它也支援正規表示式,功能強大。例如:

1、表示將filename文字的每行中的oldstring替換為newstring:

 sed 's/oldstring/newstring/g' filename

2、刪除空白行:

sed '/^\s*$/d' filename

PS:正規表示式中\s表示空白字元(包括,空格,製表符等)

三、awk

awk命令主要用於文字內容的分析處理。

如果對處理的資料需要生成報告之類的資訊,或者處理的資料是按列進行處理的,最好使用awk。

awk讀入有’\n’換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,$0則表示所有域,$1表示第一個域,$n表示第n個域。

例如:以”:”分隔filename文字的每一行並且列印第一列

awk -F ':' '{print $1}' filename

列印可以採用print函式,如果需要格式化列印,則類似C語言一樣採用printf函式。

練習:sed和awk定製化顯示舉例

1、可以製作一個文字test.txt,內容為:

This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
This is my goat, my goat's name is adam

需要顯示的結果為:

cat:betty
dog:frank
fish:george
goat:adam

如果採用sed,可以輸入

sed 's/This is my \(.*\),.*is \(.*\)/\1:\2/g' test.txt

如果採用awk,則有兩種方法

awk -F '[ ,]' '{print $4,$10}' OFS=":" test.txt 
awk -F '[ ,]' '{printf("%s:%s\n",$4,$10)}' test.txt
awk -F, '{print $1,$2}' test.txt|awk '{print $4,$9}' OFS=":"


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69905323/viewspace-2657137/,如需轉載,請註明出處,否則將追究法律責任。

相關文章