1.cut -bn <file>
以字节(byte)为分割单位
-b list 打印出list中指定位置字节,制表符和空格符均为一个字节;
-n 对于多字节字符不进行分割,主要针对汉字(一个汉字三个字节)等多字节字符;
2.cut -c <file>
以字符(character)为分割单位
-c list 打印出list中指定位置字符,对于单字节字符同-b选项,对于多字节字符有区别;
3.cut -df <file>
以域(fileld)为分割单位
-f list 打印出list中指定位置域,默认以制表符作为分隔符;
-d byte 指定分隔符;
$cat fa.txt
sample A B C D E F G H padj
ID1 1 2 3 4 5 6 7 8 0.2
ID2 1 2 3 4 5 6 7 8 0.03
ID3 1 2 3 4 5 6 7 8 0.02
$cut -b 2 fa.txt
a
D
D
D
$cut -c 1 fa.txt
s
I
I
I
$cut -b 1-5 fa.txt
sampl
ID1 1
ID2 1
ID3 1
替换第一个空格
sed 's/ /_/' mat
替换所有空格
sed 's/ /_/g' mat
将空格替换为空格
echo seq 1 10
| sed 's/ /,/g'
指定第二行,将数字替换为空格
sed '2,$ s/_[0-9]//g' mat
替换第一个空格
sed 's/ /_/1' mat
替换第二个空格
sed 's/ /_/2' mat
替换第二个及以后的空格
sed 's/ /_/2g' mat
打印序列,打印行号
$seq 20 25 |sed =
1
20
2
21
3
22
4
23
5
24
6
25
同时缓冲两行,但只对第一行行首操作
$seq 20 25 |sed =|sed 'N;s/^/>/'
>1
20
>2
21
>3
22
>4
23
>5
24
>6
25
将换行符替换为指标符号
$seq 20 25 |sed =|sed 'N;s/\n/\t/'
1 20
2 21
3 22
4 23
5 24
指定第二列按数字排序
sort -e -k2,2n
插入标题行
$seq 20 25 |sed =|sed 'N;s/\n/\t/'|sed '1 i ID\t\mum'
ID mum
1 20
2 21
3 22
4 23
5 24
6 25
打印第二行
sed -n '2p' file.txt
打印第二行,第五行,至最后一行
sed -n '2~4p'
打印第二行,到第四行
sed -n '2,4p'
提取符合特定模式的行
$sed -n '/>/p' input.fa
>ENSMUST00000000001
>ENSMUST00000000003
>ENSMUST00000000010
去除文件中的空行
空行就是只有行首和行尾的行
sed '/^$/d' file.txt
原位删除整行
sed -i '/^$/d' mat
-i 参数的使用
原位删除的意思是,屏幕不输出
删除指定范围行
$sed '1,2d' fa.txt
ID3 1 2 3 4 5 6 7 8
记忆匹配
()启动记忆匹配;\1为第一个匹配项,\2为第二个匹配项;匹配项的计数根据左括号出现的位置来定,第一个(包括起来的为\1。
$echo "hah ehbio hah"
hah ehbio hah
$echo "hah ehbio hah"|sed 's/\(.*\)/\t\1\t\1\t/'
hah ehbio hah hah ehbio hah
奇数偶数行合并
$echo -e "odd\neven\nodd\neven"
odd
even
odd
even
$echo -e "odd\neven\nodd\neven"|sed 'N;s/\n/\t/'
odd even
odd even
取出偶数行,比较简单
注意 n (小写)撇掉了奇数行
$echo -e "odd\neven\nodd\neven"|sed -n 'n;p'
even
even
取出奇数行
先都读进去,然后替换偶数行为空值,再输出
$echo -e "odd\neven\nodd\neven"|sed -n 'N;s/\n.*//p'
odd
odd
Windows/Linux换行符困境
Windows下的换行符是\r\n, Linux下换行符是\n, MAC下换行符是\r。所以Windows下的文件拷贝到Linux后,常会出现行尾多一个^M符号的情况,从而引起匹配或其它解析问题。
^M的输是 ctrl+v+M ctrl+v;ctrl+m,不是简单的输入^,再输入M。
ct@ehbio:~/SXBD$ cat -A windows.txt
ID^M$
A^M$
B^M$
C^M$
ct@ehbio:~/SXBD$ sed 's/^M//' windows.txt | cat -A
ID$
A$
B$
C$