awk & sed

awk 常見(jiàn)使用教程

awk 使用的時(shí)候有兩個(gè)要求就是腳本必須放到{}中,由于awk命令假定腳本是單個(gè)文本字符串抡蛙,所以必須將腳本放到單引號(hào)中。

gawk 是Unix 中的原始awk程序的GNU版本 所以 mac 中需要 brew install gawk && echo 'alias awk=gawk' >> ~/.zshrc


gawk '{print "hello world"}' test.txt

gawk 會(huì)對(duì)數(shù)據(jù)流中的每行文本執(zhí)行腳本程序,所以上面的程序結(jié)果是打印和 test.txt 同樣行數(shù)的 hello world

在每個(gè)文本行中,gawk 會(huì)根據(jù) 字段分隔符 給行元素分配變量,默認(rèn)的字段分割符是任意的空白字符,但我們可以通過(guò)參數(shù) -F 設(shè)定肾档。
分配的數(shù)據(jù)字段如下:

  • $0 代表整個(gè)文本行
  • $1 代表文本行中的第一個(gè)數(shù)據(jù)字段
  • $n 代表的事文本行中的第n個(gè)數(shù)據(jù)字段

gawk -F : '{print $1}' /etc/passwd # 在此用冒號(hào)指定為字段分割符

nobody
root
daemon
[...]

gawk 允許你將多條命令組合成一個(gè)正常的程序。命令行之間添加分號(hào)即可, BEGIN 允許你在處理數(shù)據(jù)之前運(yùn)行相關(guān)腳本, END 關(guān)鍵字允許指定一個(gè)腳本程序在 gawk 讀取完數(shù)據(jù)后執(zhí)行辫继。


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

My name is test

echo "My name is Rich" | gawk 'BEGIN {print "start"} {$4="test";p
rint $0} END {print "End of File"}'
start
My name is test
End of File

sed 編輯器基礎(chǔ)

Mac 的 sed 是 BSD 版本 注意:brew install gnu-sed --with-default-names

常見(jiàn)替換選項(xiàng)

echo "this is test a test" | sed 's/test/big test/'
this is big test a test

上面的例子使用了 s 命令怒见,s 命令會(huì)用斜線的第二個(gè)文本替換第一個(gè)文本,但我們可以看到只是第一處進(jìn)行了替換姑宽,如果要處理這種問(wèn)題可以使用 替換標(biāo)記遣耍,有以下四種替換標(biāo)記:

  • 數(shù)字,表明新文本將替換第幾處模式匹配的地方炮车。
  • g, 表明新文本將會(huì)替換所有匹配的文本舵变。
  • p, 表明原先行的內(nèi)容要打印出來(lái),用于顯示模式緩存區(qū)的內(nèi)容
  • w file, 將替換的結(jié)果寫入到文件中。

echo "this is test a test" | sed 's/test/big test/g'

this is big test a big test

使用地址

正常情況下 sed 會(huì)作用到文本數(shù)據(jù)的每一行瘦穆,如果只想將命令作用到特定行或者某些行纪隙,需要使用 行尋址,有以下形式:

數(shù)字方式的行尋址


sed '2s/dog/cat/' test.txt #第二行
sed '2,3s/dog/cat/' test.txt #行地址區(qū)間
sed '2,$s/dog/cat/' test.txt # 從某行開(kāi)始的所有行,使用 $ 符號(hào)標(biāo)記

文本模式過(guò)濾


sed '/wang/s/bash/csh/' /etc/passwd  # 前面的 wang 說(shuō)明只處理匹配到該文本的行,當(dāng)然使用正則是最方便扛或。

刪除行

刪除命令 d 可以配合尋址模式進(jìn)行刪除文本

sed '2d' test.txt

插入和附件文本以及修改行

  • 插入 (insert) 命令 i 會(huì)在指定行前增加一個(gè)新行
  • 附件 (append) 命令 a 會(huì)在指定行后增加一個(gè)新行
  • 修改 (change) 命令 c 配合尋址修改行

sed '[address]command\ new line'

sed '1i\this is new line.' test.txt

this is new line.
the quick brown fox
the quick brown fox1
the quick brown fox2

sed '1a\this is new line.' test.txt

the quick brown fox
this is new line.
the quick brown fox1
the quick brown fox2

sed '$a\this is new line.' test.txt  # $ 代表最后一行

sed '2c\this is new line.' test.txt

轉(zhuǎn)化命令 y


sed 'y/123/789/' test.txt

the quick brown fox
the quick brown fox7
the quick brown fox8
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绵咱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子熙兔,更是在濱河造成了極大的恐慌悲伶,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件住涉,死亡現(xiàn)場(chǎng)離奇詭異麸锉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秆吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門淮椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人纳寂,你說(shuō)我怎么就攤上這事⌒豪梗” “怎么了毙芜?”我有些...
    開(kāi)封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)争拐。 經(jīng)常有香客問(wèn)我腋粥,道長(zhǎng)晦雨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任隘冲,我火速辦了婚禮闹瞧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘展辞。我一直安慰自己奥邮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布罗珍。 她就那樣靜靜地躺著洽腺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪覆旱。 梳的紋絲不亂的頭發(fā)上蘸朋,一...
    開(kāi)封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音扣唱,去河邊找鬼藕坯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛噪沙,可吹牛的內(nèi)容都是我干的堕担。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼曲聂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼霹购!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起朋腋,我...
    開(kāi)封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤齐疙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后旭咽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贞奋,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年穷绵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轿塔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仲墨,死狀恐怖勾缭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情目养,我是刑警寧澤俩由,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站癌蚁,受9級(jí)特大地震影響幻梯,放射性物質(zhì)發(fā)生泄漏兜畸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一碘梢、第九天 我趴在偏房一處隱蔽的房頂上張望咬摇。 院中可真熱鬧,春花似錦煞躬、人聲如沸肛鹏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)龄坪。三九已至,卻和暖如春复唤,著一層夾襖步出監(jiān)牢的瞬間健田,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工佛纫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留妓局,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓呈宇,卻偏偏與公主長(zhǎng)得像好爬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甥啄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • sed與awk實(shí)例 文本間隔 在每一行后面增加一空行 將原來(lái)的所有空行刪除并在每一行后面增加一空行存炮。這樣在輸出的文...
    stuha閱讀 1,900評(píng)論 0 21
  • 博文閱讀 學(xué)習(xí)內(nèi)容: 學(xué)習(xí)sed編輯器gawk編輯器入門sed編輯器基礎(chǔ) shell腳本最常見(jiàn)的一個(gè)用途就是處理文...
    王詩(shī)翔閱讀 1,404評(píng)論 1 9
  • 本文承接之前寫的三十分鐘學(xué)會(huì)AWK一文,在學(xué)習(xí)完AWK之后蜈漓,趁熱打鐵又學(xué)習(xí)了一下SED穆桂,不得不說(shuō)這兩個(gè)工具真的堪稱...
    mylxsw閱讀 4,398評(píng)論 3 74
  • 現(xiàn)在把我從網(wǎng)上看到的sed、grep和awk之間的區(qū)別列出來(lái)融虽,希望對(duì)自己有用享完。 grep主要用于搜索某些字符串 s...
    杰倫哎呦哎呦閱讀 1,379評(píng)論 0 2
  • 一般又、awk 詳細(xì)概念awk是一種編程語(yǔ)言,用于在linux/unix下對(duì)文本和數(shù)據(jù)進(jìn)行處理巍佑。數(shù)據(jù)可以來(lái)自標(biāo)準(zhǔn)輸入(...
    Catcher07閱讀 313評(píng)論 0 0