【linxu編程】Linux文本處理三劍客——sed

sed 是一種流編輯器,它一次處理一行內(nèi)容。

處理時(shí),把當(dāng)前處理的行存儲(chǔ)在稱(chēng)為“模式空間”(pattern space)的臨時(shí)緩沖區(qū)中,接著用 sed 命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。

生成聯(lián)系文件

leadingsci@DELL5577:~/Test$ cat df.txt
Filesystem      Size  Used Avail Use% Mounted on
rootfs          119G   57G   62G  48% /
tmpfs           119G   57G   62G  48% /run
none            119G   57G   62G  48% /run/lock
none            119G   57G   62G  48% /run/shm
none            119G   57G   62G  48% /run/user

替換

s 表示替換,將制表符 \t 替換為 ,;默認(rèn)只替換第一個(gè)匹配的制表符。若想匹配第二個(gè),則:

leadingsci@DELL5577:~/Test$ sed 's/\s/,/2' df.txt

將第二列的G ,替換成為GB

leadingsci@DELL5577:~/Test$ sed 's/G/GB/2' df.txt
Filesystem      Size  Used Avail Use% Mounted on
rootfs          119G   57GB   62G  48% /
tmpfs           119G   57GB   62G  48% /run
none            119G   57GB   62G  48% /run/lock
none            119G   57GB   62G  48% /run/shm
none            119G   57GB   62G  48% /run/user

全部替換
g 即為 global,意為全局替換。

leadingsci@DELL5577:~/Test$ sed -e 's/G/GB/g' df.txt
Filesystem      Size  Used Avail Use% Mounted on
rootfs          119GB   57GB   62GB  48% /
tmpfs           119GB   57GB   62GB  48% /run
none            119GB   57GB   62GB  48% /run/lock
none            119GB   57GB   62GB  48% /run/shm
none            119GB   57GB   62GB  48% /run/user

刪除

刪除特定字符

刪除n開(kāi)頭的字符

fasta中可以刪除> 開(kāi)頭的字符

leadingsci@DELL5577:~/Test$ grep "^n" df.txt | sed 's/^n//'
one            119G   57G   62G  48% /run/lock
one            119G   57G   62G  48% /run/shm
one            119G   57G   62G  48% /run/user

# /g效果一致
leadingsci@DELL5577:~/Test$ grep "^n" df.txt | sed 's/^n//g'
one            119G   57G   62G  48% /run/lock
one            119G   57G   62G  48% /run/shm
one            119G   57G   62G  48% /run/user

刪除空行

正則,^$ 表示空行,放在 // 中表示在文件中匹配空行;d 為 delete,即刪除;所以整體的意思就是將空行刪除。

leadingsci@DELL5577:~/Test$ sed '/^$/d' df.txt
Filesystem      Size  Used Avail Use% Mounted on
rootfs          119G   57G   62G  48% /
tmpfs           119G   57G   62G  48% /run
none            119G   57G   62G  48% /run/lock
none            119G   57G   62G  48% /run/shm
none            119G   57G   62G  48% /run/user

添加行

1i 表示在第一行之前插入一行(insertion),\t 表制表符。
1a 即在第一行之后追加一行(append)

leadingsci@DELL5577:~/Test$ sed '1iroot1\troot2\troot3\troot4' df.txt
root1   root2   root3   root4
Filesystem      Size  Used Avail Use% Mounted on
rootfs          119G   57G   62G  48% /
tmpfs           119G   57G   62G  48% /run
none            119G   57G   62G  48% /run/lock
none            119G   57G   62G  48% /run/shm
none            119G   57G   62G  48% /run/user

顯示指定行

顯示第二行

-n 表示,不處理的行,不打??;p 即 print,2p 表示打印第二行。

leadingsci@DELL5577:~/Test$ sed -n '2p' df.txt
rootfs          119G   57G   62G  48% /

顯示指定區(qū)間內(nèi)的行

第二到第四行

leadingsci@DELL5577:~/Test$ sed -n '2,4p' df.txt
rootfs          119G   57G   62G  48% /
tmpfs           119G   57G   62G  48% /run
none            119G   57G   62G  48% /run/lock

按一定規(guī)律顯示指定的行

打印第一行,第五行,到最后一行

leadingsci@DELL5577:~/Test$ sed -n '1~4p' df.txt
Filesystem      Size  Used Avail Use% Mounted on
none            119G   57G   62G  48% /run/shm

打印第 1 行,然后跳過(guò) 4 行,打印第 5 行;如此循環(huán)到最后一行。在 fastq 中即為打印每條序列的 header。

$ zcat 1_SD_30_1.fq.gz | sed -n '1~4p' | head -n 5

2~4 和 p 之間可以加上替換操作

將每行第一個(gè)G替換為GB

leadingsci@DELL5577:~/Test$ sed -n '2~4s/G/GB/p' df.txt
rootfs          119GB   57G   62G  48% /
none            119GB   57G   62G  48% /run/user

$ zcat 1_SD_30_1.fq.gz | sed -n '1~4s/^@/>/p' | head -n 5

將fastq打印為fasta

$ zcat 1_SD_30_1.fq.gz | sed -n '1~4s/^@/>/p;2~4p' | head -n 5
>ERR569754.4 9L6V3M1:265:C06M9ACXX:3:1101:6568:1985 length=101
CAGCATCACATATTAGGCTTTATCCCTTTAAAGCAATATATTTTGAAATATCAATTATCATTTTCATTTATGGCCCGTAGGGCATTGCAGGGCACAACG
>ERR569754.7 9L6V3M1:265:C06M9ACXX:3:1101:10900:1974 length=101
TGCTGTTCATGGTGTTGTTGCTCTTGCTGTTGTTGTTGTTGCCCACGATGGGATCGCCGTTGATGGGGCCGTTAACGGGATTGCCATGAATCTTGGTGT
>ERR569754.18 9L6V3M1:265:C06M9ACXX:3:1101:1157:2083 length=101

刪除空格即其后的內(nèi)容:

$ zcat 1_SD_30_1.fq.gz | sed -n '1~4s/^@/>/p;2~4p' | sed 's/ .*//' | head -n 5
>ERR569754.4
CAGCATCACATATTAGGCTTTATCCCTTTAAAGCAATATATTTTGAAATATCAATTATCATTTTCATTTATGGCCCGTAGGGCATTGCAGGGCACAACG
>ERR569754.7
TGCTGTTCATGGTGTTGTTGCTCTTGCTGTTGTTGTTGTTGCCCACGATGGGATCGCCGTTGATGGGGCCGTTAACGGGATTGCCATGAATCTTGGTGT
>ERR569754.18
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文承接之前寫(xiě)的三十分鐘學(xué)會(huì)AWK一文,在學(xué)習(xí)完AWK之后,趁熱打鐵又學(xué)習(xí)了一下SED,不得不說(shuō)這兩個(gè)工具真的堪稱(chēng)...
    mylxsw閱讀 4,515評(píng)論 3 74
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,235評(píng)論 2 33
  • Sed工具工作原理及特性 1. sed是流編輯器,每一次讀取一行到內(nèi)存中,即稱(chēng)之為模式空間(pattern spa...
    魏鎮(zhèn)坪閱讀 11,125評(píng)論 0 12
  • sed與awk實(shí)例 文本間隔 在每一行后面增加一空行 將原來(lái)的所有空行刪除并在每一行后面增加一空行。這樣在輸出的文...
    stuha閱讀 2,020評(píng)論 0 20
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,219評(píng)論 0 0

友情鏈接更多精彩內(nèi)容