
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