sed 是一種流編輯器鲁沥,它一次處理一行內(nèi)容瘫筐。
處理時,把當(dāng)前處理的行存儲在稱為“模式空間”(pattern space)的臨時緩沖區(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)只替換第一個匹配的制表符本慕。若想匹配第二個排拷,則:
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開頭的字符
fasta中可以刪除> 開頭的字符
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 行,然后跳過 4 行悍抑,打印第 5 行鳄炉;如此循環(huán)到最后一行。在 fastq 中即為打印每條序列的 header搜骡。
$ zcat 1_SD_30_1.fq.gz | sed -n '1~4p' | head -n 5
2~4 和 p 之間可以加上替換操作
將每行第一個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