Shell輸出文本中的指定行

Linux Shell輸出文本中的指定行

在Linux系統(tǒng)上如何快速查看文本中指定行呢鸦难?有時(shí)文本較大比如有10w行馍忽,想要快速查看第99行該怎么做呢扮念?
本文以文件名test.txt為例九榔,介紹3種方式快速查看test.txt的第99行芳室。相信你可以輕易的舉一反三。

使用sed

sed全名:stream editor呈枉,流編輯器,使用程序的方式來(lái)編輯文本埃碱,可以實(shí)現(xiàn)替換猖辫、刪除、新增砚殿、選取特定行等功能啃憎,是一種很hacker的方式。sed基本上使用正則表達(dá)式匹配似炎,對(duì)正則表達(dá)式要求較高辛萍。
想要快速入門sed參考sed簡(jiǎn)明教程,想要深入學(xué)習(xí)參考sed完整手冊(cè)羡藐。

sed語(yǔ)法格式:

sed [ -n ] [ -u ] Script  [ File ... ]
sed [ -n ] [ -u ] [ -e Script ] ... [ -f ScriptFile ] ...  [ File 
... ]

關(guān)鍵Options介紹:

  • -n : 安靜模式贩毕。一般sed用法中,所有來(lái)自STDIN的數(shù)據(jù)都會(huì)被輸出到屏幕上仆嗦,使用-n只有被sed處理的行才會(huì)列出來(lái)辉阶。如果不使用-n,使用sed打印時(shí)瘩扼,會(huì)把輸入流和處理的信息都打印一遍
  • a:append谆甜,追加文本
  • i:insert,插入文本
  • d:delete集绰,刪除文本
  • s: 模式匹配替換
  • p:打印文本

sed使用示例

  1. 在指定行插入或追加: a, i
    a. 在test.txt第一行前插入:sed “1 i This is a test file” test.txt
    b. 在test.txt最后一行追加:sed “$ a This is the end of file” test.txt
  2. 刪除: d
    a. 刪除test.txt第二行: sed ‘2d’ test.txt
    b. 刪除test.txt符合正則表達(dá)式/fish的行: sed ‘/fish/d’ test.txt
  3. 修改文本:s
    a. 將text.txt中l(wèi)ove替換為like: sed “s/love/like/g” test.txt (/g表示全局匹配)
  4. 打印文本: p
    a. 輸出test.txt的第5-7行:sed -n ‘5,7p’ test.txt (-n的作用就顯示出來(lái)了规辱,可以去除-n查看效果)

ps: 以上命令并不會(huì)真的修改掉test.txt的內(nèi)容,如果想修改文本內(nèi)容可以使用重定向栽燕,或者使用-i選項(xiàng)罕袋。

使用sed輸出test.txt的第99行改淑?

有了以上的sed基礎(chǔ),可以輕易得出解決方案:sed -n '99,p' test.txt炫贤。但sed在print后并不會(huì)立即退出溅固,還會(huì)繼續(xù)搜索文件直到文件末尾,當(dāng)文件較大的時(shí)候使用sed的效率會(huì)比較低兰珍∈坦可以做如下優(yōu)化:sed -n '99,p;100q' test.txt,打印完之后在100行退出掠河。

接分號(hào)亮元,表示打印特定行,如下命令只會(huì)打印出第一行與第十行

sed -n '1p;10p' test.txt

接逗號(hào)唠摹,表達(dá)連續(xù)的行婁爆捞,如下命令打印出第一行到第十行

sed -n '1,10p' test.txt

如下命令打印1~5行與第9行.

sed -n '1,5p;9p' test.txt

使用awk

awk: 文本處理工具,可以在文件中查找與模式匹配的行并在這些行上執(zhí)行指定的操作勾拉。awk比sed早誕生2-3年煮甥,作用與sed類似∨涸蓿快速入門awk可參考awk簡(jiǎn)明教程成肘。

awk語(yǔ)法格式

awk [ -u ] [ -F Ere ] [ -v Assignment ] ... { -f ProgramFile | 
'Program' } [ [ File ... | Assignment ... ] ] ...

awk提供了一系列內(nèi)建變量:

  • $0: 當(dāng)前記錄(這個(gè)變量中存放著整個(gè)行的內(nèi)容)
  • $1~$n: 當(dāng)前記錄的第n個(gè)字段,字段間由FS分隔
  • FS: 輸入字段分隔符 默認(rèn)是空格或Tab
  • NF: 當(dāng)前記錄中的字段個(gè)數(shù)斧蜕,就是有多少列
  • NR: 已經(jīng)讀出的記錄數(shù)双霍,就是行號(hào),從1開始批销,如果有多個(gè)文件話洒闸,這個(gè)值也是不斷累加中。
  • FNR: 當(dāng)前記錄數(shù)均芽,與NR不同的是丘逸,這個(gè)值會(huì)是各個(gè)文件自己的行號(hào)
  • RS: 輸入的記錄分隔符, 默認(rèn)為換行符
  • OFS: 輸出字段分隔符掀宋, 默認(rèn)也是空格
  • ORS: 輸出的記錄分隔符鸣个,默認(rèn)為換行符
  • FILENAME: 當(dāng)前輸入文件的名字

awk使用示例:

  1. 打印test.txt中第一列為This的行:awk '$1=="This" test.txt
  2. 打印表頭和test.txt中第一列為This的行:awk '$1=="This" || NR == 1' test.txt
  3. 格式化輸出:awk '$1=="This" || NR==1 {printf "%-20s %-20s\n",$4,$5}' test.txt

使用awk輸出test.txt的第99行?

使用內(nèi)建變量NR和FNR:

  • awk 'NR==99' test.txt
  • awk 'FNR==99' test.txt

ps: awk打印完也不會(huì)立即退出布朦,可以添加exit優(yōu)化:awk ‘NR==99 {print; exit}’ test.txt

使用head和tail組合

head和tail故名思意囤萤,相對(duì)簡(jiǎn)單,分別輸出文件或流的開頭n行或結(jié)尾n行是趴,就不在此詳細(xì)介紹了涛舍。直接給出解決方案:
tail -n+99 test.txt|head -1

很容易想到對(duì)稱的組合:head -99 test.txt|tail -1,但是當(dāng)文件不足99行時(shí)唆途,輸出的是文件最后一行的內(nèi)容富雅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掸驱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子没佑,更是在濱河造成了極大的恐慌毕贼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤奢,死亡現(xiàn)場(chǎng)離奇詭異鬼癣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)啤贩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門待秃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痹屹,你說(shuō)我怎么就攤上這事章郁。” “怎么了志衍?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵暖庄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我楼肪,道長(zhǎng)培廓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任淹辞,我火速辦了婚禮,結(jié)果婚禮上俘侠,老公的妹妹穿的比我還像新娘象缀。我一直安慰自己,他們只是感情好爷速,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布央星。 她就那樣靜靜地躺著,像睡著了一般惫东。 火紅的嫁衣襯著肌膚如雪莉给。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天廉沮,我揣著相機(jī)與錄音颓遏,去河邊找鬼。 笑死滞时,一個(gè)胖子當(dāng)著我的面吹牛叁幢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坪稽,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼曼玩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鳞骤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起黍判,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤豫尽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后顷帖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體美旧,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年窟她,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陈症。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡震糖,死狀恐怖录肯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吊说,我是刑警寧澤论咏,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站颁井,受9級(jí)特大地震影響厅贪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雅宾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一养涮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眉抬,春花似錦贯吓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至库北,卻和暖如春爬舰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寒瓦。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工情屹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杂腰。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓屁商,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜡镶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359