Linux處理文本的三駕馬車-grep命令及使用例子

Linux處理文本的三駕馬車

? grep

? sed

? awk

Linux處理文本的第一駕馬車——grep命令

以下主要記錄grep的用法卿闹,后續(xù)會把另外兩架馬車(sed和awk命令)的用法整理出來。

grep

grep是一個最初用于Unix操作系統(tǒng)的命令行工具。在給出文件列表或標準輸入后,grep會對匹配一個或多個正則表達式的文本進行搜索,并只輸出匹配(或者不匹配)的行或文本祭刚。https://zh.wikipedia.org/wiki/Grep

使用格式

grep [options] pattern file

pattern是關(guān)鍵詞

常見參數(shù)

-w:word 精確查找某個關(guān)鍵詞 pattern

-c:統(tǒng)計匹配成功的行的數(shù)量

-v:反向選擇,即輸出沒有沒有匹配的行

-n:顯示匹配成功的行所在的行號

-r:從目錄中查找pattern

-e:指定多個匹配模式

-f:從指定文件中讀取要匹配的 pattern

-i:忽略大小寫

結(jié)合參數(shù)的用法:

這里用了生信技能樹提供的一個文件example.gtf,也可以到這個網(wǎng)址http://hgdownload.cse.ucsc.edu/downloads.html挑一個物種gtf格式的文件涡驮,或是使用一個txt格式的文本(像生信技能樹提供簡單readme.txt)練習(xí)暗甥。

  • -w:word 精確查找某個關(guān)鍵詞 pattern (完整單詞
less Data/example.gtf | grep 'gene'
##搜索出的gene就會被高亮出來,但是顯示出的有‘gene’捉捅,‘gene_status’撤防,‘gene_id’
less Data/example.gtf | grep -w 'gene'
##加-w就是搜索出獨立的‘gene’,其它帶有連字符_的gene沒有被高亮棒口,如‘gene_status’寄月,‘gene_id’。

不加參數(shù)搜索无牵,帶有關(guān)鍵詞的所有基因格式都被搜索(高亮)出來

不加參數(shù)搜索漾肮,帶有關(guān)鍵詞的所有基因格式會被搜索出來

-w就是搜索出獨立的‘gene’,其它帶有連字符_的gene沒有被高亮(搜索出來)

加-w參數(shù)搜索
  • -c:統(tǒng)計匹配成功的行的數(shù)量
less Data/example.gtf | grep -w -c 'gene'
##-c,搜索出含有g(shù)ene的一共多少行茎毁,20行

統(tǒng)計單獨關(guān)鍵詞出現(xiàn)的行數(shù)(因為有-w參數(shù))

image-20220308102004519
  • -v:反向選擇克懊,即輸出沒有沒有匹配的行(匹配到關(guān)鍵詞的不要,沒有關(guān)鍵詞的被保留下來)
less Data/example.gtf | grep -w -v 'gene'
##-v,展示所有不含獨立gene存在七蜘,如外顯子谭溉,
less Data/example.gtf | grep -w -v -c 'gene'
##可以加上-c,也能統(tǒng)計出沒有含gene的行數(shù)崔梗,217行
wc -l Data/example.gtf
##統(tǒng)計原文件有237行夜只,含有g(shù)ene的有20行,不含gene有217行蒜魄,加起來一共237行扔亥。
反向搜索
  • -n:顯示匹配成功的行所在的行號
less Data/example.gtf | grep -w -n 'gene'
##顯示關(guān)鍵詞所在的行號
顯示關(guān)鍵詞所在的行號
  • -r:從目錄中查找pattern
grep 'hello' -r ./ ##-r指定根目錄
grep 'hello' -r ./ ##指定目錄,忽略大小寫
##之前在當(dāng)前目錄下成功安裝過miniconda谈为,conda里面文件旅挤,文件有很hello,都刷屏了伞鲫。
grep 'Welcome' -r Data/
##把關(guān)鍵詞所在的目錄顯示出來:Data/readme.txt:Welcome to Biotrainee() !
grep -i 'welcome' -r Data/
##有時候記不得哪個詞是大寫粘茄,加-i,忽略大小寫秕脓,后續(xù)會講
image-20220308104016220
  • -e:指定多個匹配模式 :搜索多個關(guān)鍵詞
less Data/example.gtf | grep -w -e 'gene' -e UTR
##因為gene有很多種形式柒瓣,加-w是想搜索單獨存在的gene
##同時搜索'gene'和UTR,如果還要同時搜索其它的吠架,還可以繼續(xù)可以加-e

搜索到的關(guān)鍵詞被高亮出來

image-20220308104626254
  • -f:從指定文件中讀取要匹配的 pattern(關(guān)鍵詞)
##這里舉一個比較特殊的例子
##如果有5個以上的關(guān)鍵詞要搜索芙贫,命令太長就很麻煩,可以建一個文本傍药,每個關(guān)鍵詞獨占一行
cat >keywords
gene
UTR
start_codon
stop_codon
^C  ##按control c 退出
cat keywords
less Data/example.gtf | grep -w -f keywords | less -S
##含有關(guān)鍵詞的行就被搜索出來磺平,沒有的行就不會被輸出魂仍。
image-20220308105252568
-f關(guān)鍵詞匹配
  • -i:忽略大小寫
less Data/example.gtf | grep utr
##example.gtf沒有小寫的utr,不加-i拣挪,沒法匹配出來
less Data/example.gtf | grep -i utr
##-i忽略大小寫
less Data/example.gtf | grep -i Utr
##Utr擦酌,關(guān)鍵詞含有一個大寫字母
-i參數(shù)的示例
  • -o:匹配列出關(guān)鍵字符
cat readme.txt | grep 'a'
##不加-o參數(shù)
cat readme.txt | grep -o 'a'
##-o的區(qū)別
cat readme.txt | grep -o 'a' | wc
-o參數(shù)的示例

正則表達式

是對字符串操作的一種邏輯公式,就是用事先 定義好的一些特定字符菠劝、及這些特定字符的組合赊舶,組成一個 “規(guī)則字符串”,這個“規(guī)則字符串”用來表達對字符串的 一種過濾邏輯(可以理解為模糊搜索或是模糊匹配—邏輯的模糊)

^ 行首定位的功能

$ 行尾定位的功能

. 換行符之外的任意單個字符

? 匹配之前項 0 次或者一次

+ 匹配 1 次或者多次

***** 匹配 0 次或者多次

{n} 匹配 n

{n,} 匹配至少 n

{m,n} 至少 m, **最多 ** n

[] 匹配任意一個

[^] 排除字符

| 或者

-E可以識別正則表達式闸英,锯岖?+ 等可以不用轉(zhuǎn)義符介袜。

正則表達式的示例

以readme.txt文本作為示例:

cat readme.txt
# Welcome to Biotrainee()!
#   This is your personal account in our Cloud.
# Have a fun with it.
# Please feel free to contact with me(email to jmzeng1314@163.com)
# (http://www.biotrainee.com/thread-1376-1-1.html)
  • ^ 行首
 cat readme.txt | grep '^T'
 ##行首有大寫字母T會被高亮甫何,以及所在的行會被搜索出來
image-20220308121003893

只顯示匹配上的行

  • $ 行尾
cat readme.txt | grep ')$'
##搜索行尾有”)“會被搜索出來
image-20220308121044074
  • . 換行符之外的任意單個字符
cat readme.txt | grep 'f.ee'
##'f.ee'中的.匹配字母r,空格也可以遇伞。
cat readme.txt | grep 't w'
##舉個對比的,用空格
cat readme.txt | grep 't.w'
##用.
cat readme.txt | grep '.ee'
##這個例子更明顯
image-20220308121747934
  • ? 匹配之前項0次或者一次
cat readme.txt | grep 'f\?ee'
##\表示的是轉(zhuǎn)義
##grep命令不識別?辙喂,需要在前面加上\來轉(zhuǎn)義
image-20220308121929415
  • +匹配1次或者多次
cat readme.txt | grep 're\+'
##也要\轉(zhuǎn)義,re鸠珠,ree或是reee都可以匹配到巍耗。
image-20220308122643476
  • *匹配0次或者多次
cat readme.txt | grep 'f*ee'
##*不需要加轉(zhuǎn)義\,因為*可以直接被grep識別到,會搜索到ee,fee,ffee
image-20220308122824777
  • . + ?:等都是有一個泛指的含義
  • ?和+:需要\來轉(zhuǎn)義渐排,因為grep不能直接識別
  • -E:可以識別正則表達式炬太,加-E,驯耻?+ 等可以不用轉(zhuǎn)義符亲族。

以下正則表達式的確切匹配

  • {n} 匹配n次
cat readme.txt | grep 'fe\{2\}l'
##花括號需要用轉(zhuǎn)義\,e這個字符被搜索兩次才會被搜素出來

注意:花括號{}需要轉(zhuǎn)義符\才能被grep識別

image-20220308155138765
  • {n,} 匹配至少n次
cat readme.txt | grep 'fe\{2,10\}l'
###{m,n} 至少m,最多n 
  • [] 匹配任意一個
cat readme.txt | grep [bB]
##b和B為關(guān)鍵詞,單獨一個字符就是一個關(guān)鍵詞

只要有b或是B都會被匹配出來

image-20220308155459634
  • [^] 排除字符
cat readme.txt | grep '[^Tt]'
##就是不想要的都高亮出來可缚,是T或t的都不要高亮
image-20220308155617818
  • | 或
##用的時候要用引號括起來
cat readme.txt | grep 'ee|ea'
##沒有顯示結(jié)果霎迫,因為加轉(zhuǎn)義\
cat readme.txt | grep 'ee\|ea'
##有ee或是ea這兩個關(guān)鍵詞的行都會被匹配出來
###建議搜索的關(guān)鍵詞用引號括起來: ‘關(guān)鍵詞’

注意:使用|(或)需要用轉(zhuǎn)義符

image-20220308155931507

補充知識:

  • $符號的使用,命令行提示符帘靡,普通用戶

  • 管理員的命令行提示符是#知给。管理員或是root的命令行

正則表達式還有很多用法,到在網(wǎng)上自行搜索

正則表達式在線測試:

https://tool.oschina.net/regex/

image-20220228162111929

正則表達式教程

https://www.runoob.com/regexp/regexp-syntax.html

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

其實用的不多描姚,生信分析做的是一些比較低級別文本處理涩赢,就用比較簡單的語法

作業(yè)

1. 精確匹配 example.gtf 中的 gene ,并統(tǒng)計

less -S Data/example.gtf | grep -w  'gene' -c 
#20
less -S Data/example.gtf | grep -w 'gene' |wc 

2. 匹配 exon 的行轩勘,然后反向輸出

less -S Data/example.gtf | grep -w -v 'exon' | less -S
##后面再加less -S是為了排列更整齊

可以對比看看:

image-20220308161324066

后面再加一個less -S筒扒,排列就很規(guī)整:

image-20220308161725595

3. 匹配 CDS 或者 UTR 的行

less -S Data/example.gtf | grep -w 'CDS\|UTR'
less -S Data/example.gtf | grep -w -e 'CDS' -e 'UTR'

#正則表達式:轉(zhuǎn)義符和—E行使同樣的功能:
less -S Data/example.gtf | grep -w 'CDS\|UTR'
less -S Data/example.gtf | grep -E -w 'CDS|UTR'
#-E和\任選一項

4. 查找 example.fq 文件 包含 @ 的行并統(tǒng)計

#答案操作流程:
less -S Data/example.fq##首先
less -S Data/example.fq | grep '@'| wc
#  10      10      20##20主要是沒和后面有一個換行符,累計起來20個

5. 查找 example.fq 文件 @ 開頭 的行并統(tǒng)計

#答案流程:
less -S Data/example.fq | grep '@'
less -S Data/example.fq | grep '^@' |less
less -S Data/example.fq | grep '^@' |wc
#1006    2006   54308
less -S Data/example.fq |grep '^@' |grep -v '@ERR'
##發(fā)現(xiàn)有6行是原文件的質(zhì)量值赃阀。
#其實有1000行

說明

以上內(nèi)容參考生信技能樹小郭老師的講解和課件霎肯,花了一定的時間擎颖,認真做的筆記。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末观游,一起剝皮案震驚了整個濱河市搂捧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懂缕,老刑警劉巖允跑,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搪柑,居然都是意外死亡聋丝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進店門工碾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弱睦,“玉大人,你說我怎么就攤上這事渊额】瞿荆” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵旬迹,是天一觀的道長火惊。 經(jīng)常有香客問我,道長奔垦,這世上最難降的妖魔是什么屹耐? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮椿猎,結(jié)果婚禮上惶岭,老公的妹妹穿的比我還像新娘。我一直安慰自己鸵贬,他們只是感情好俗他,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阔逼,像睡著了一般兆衅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗜浮,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天羡亩,我揣著相機與錄音,去河邊找鬼危融。 笑死畏铆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吉殃。 我是一名探鬼主播辞居,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼楷怒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓦灶?” 一聲冷哼從身側(cè)響起鸠删,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贼陶,沒想到半個月后刃泡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡碉怔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年烘贴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撮胧。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡桨踪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趴樱,到底是詐尸還是另有隱情馒闷,我是刑警寧澤酪捡,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布叁征,位于F島的核電站,受9級特大地震影響逛薇,放射性物質(zhì)發(fā)生泄漏捺疼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一永罚、第九天 我趴在偏房一處隱蔽的房頂上張望啤呼。 院中可真熱鬧,春花似錦呢袱、人聲如沸官扣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惕蹄。三九已至,卻和暖如春治专,著一層夾襖步出監(jiān)牢的瞬間卖陵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工张峰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泪蔫,地道東北人。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓喘批,卻偏偏與公主長得像撩荣,于是被迫代替她去往敵國和親铣揉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361

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