shell學習記錄----初識sed和gawk

Linux命令行與shell腳本編程大全中關於sed和gawk的介紹合在一塊兒,並且結構有點亂。shell

不像以前的命令寫的很清楚。因此此次我須要寫下來整理一下。編程

1、sed部分

1.1 sed命令格式以下:

sed option script filebash

  • -e script:在處理輸入時,將script中指定的命令添加到已有的命令中
  • -f file:在處理輸入時,將file中指定的命令添加到已有的命令中
  • -n: 不產生命令輸出,使用print命令來完成輸出
  • -e: 執行多個命令

 

1.2 script裏面又有一些命令:

s/pattern/replacement/flags 替換命令,flags包括:數字(行號),g(替換全部),p(打印原先內容),w file(寫進文件)編程語言

例子:編輯器

sed 's/test/trial/' data4.txt
sed 's/test/trial/2' data4.txt
sed 's/test/trial/g' data4.txt
sed -n 's/test/trial/p' data4.txt
sed 's/test/trial/w test.txt' data5.txt

 

而後,s指令,又能夠指定地址,格式以下:ide

[address]command 或者大數據

address {this

  command1spa

  command2命令行

  command3

}

或者直接用/pattern/command,匹配出須要的部分,再操做。

使用例子:

sed '2s/dog/cat/' data1.txt
sed '2,3s/dog/cat/' data1.txt
sed '2,$s/dog/cat/' data1.txt
sed '/Samantha/s/bash/csh/' /etc/passwd

sed '2{
s/fox/elephant/
s/dog/cat/
}' data1.txt

sed '3,${
s/brown/green/
s/lazy/active/
}' data1.txt
script--s

 

1.3 刪除行命令

和s相似,直接例子吧

sed '3d' data6.txt
sed '2,3d' data6.txt
sed '3,$d' test6.txt
sed '/number 1/d' data6.txt
刪除行,請當心使用

 

1.4 插入和附加文本

插入命令(i),在指定行前加一個新行

附加命令(a),在指定行後加一個新行

sed '[address] command\ new line'

例子:

echo "Test Line 2" | sed 'i\ Test Line 1'
echo "Test Line 2" | sed 'a\Test Line 1'
插入i,a命令,注意是\

 

1.5 修改行

命令c相似於插入和附加,直接上例子吧

sed '3c\This is a changed line of text.' data6.txt
sed '/number 3/c\This is a changed line of text.' data6.txt
修改行

 

1.6 轉換命令

轉換命令(y)是惟一能夠處理單個字符的sed編輯器命令

[address]y/inchars/outchars/

例子:

sed 'y/123/789/' data8.txt   data8中全部123換成789,一一對應
y命令

 

1.7 回顧打印

  • p命令打印文本
  • 等號(=)打印行號
  • l(小寫L)列出行

例子:

echo "this is a test" | sed 'p'

sed -n '/number 3/p' data6.txt
sed -n '2,3p' data6.txt

sed -n '/3/{
p
s/line/test/p
}' data6.txt

sed '=' data1.txt

sed -n '/number 4/{
=
p
}' data6.txt

sed -n 'l' data9.txt
打印例子

 

1.8 sed處理文件

寫入文件用命令(w),[address]w filename

讀取數據用命令(r),[address]r filename

例子:

sed -n '/Browncoat/w Browncoats.txt' data11.txt

sed '3r data12.txt' data6.txt
sed '/number 2/r data12.txt' data6.txt
sed '$r data12.txt' data6.txt
寫入和讀取的例子

 

2、gawk部分

gawk提供了一種編程語言,能夠作下面的事情:

定義變量來保存數據: 

  • 定義變量來保存數據;
  • 使用算術和字符串操做符來處理數據;
  • 使用結構化編程概念(好比if-then語句和循環)來爲數據處理增長處理邏輯
  • 經過提取數據文件中的數據元素,將其從新排列或格式化,生成格式化報告。

2.1 gawk命令格式:

gawk options program file

可用選項:

-F fs  指定行中劃分數據字段的字段分隔符

-f file  從指定的文件中讀取程序

-v var=value  定義gawk程序中的一個變量及其默認值

-mf N  指定要處理的數據文件中的最大字段數

-mr N  指定數據文件中的最大數據行數

-W keyword  指定gawk的兼容模式或警告等級

 

gawk會從STDIN接收數據,並處理而後打印到STDOUT。

2.2 gawk數據字段變量

  • $0表明整個文本行
  • $1文本行中第一個數據字段
  • $2文本行中第二個數據字段
  • $n文本行中第n個數據字段

2.3 使用多個命令

只要在命令之間放個分號便可,組成多命令。

echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

 

2.4 在處理數據先後運行腳本

關鍵字:BEGIN、END

gawk 'BEGIN {print "The data3 File Contents:"}
{print $0}
END {print "End of File"}' data3.txt
相關文章
相關標籤/搜索