sed主要是对行操作,而cut 是队列来操作
sed 后面接的动作,请务必以 '' 两个单引号括住喔!
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作。通常这个 s 的动作可以搭配正规表示法!
g: 全局模式,不加g的话只操作第一列的行
例如 1,20s/old/new/g 就是啦!
以行为单位的删除
nl test.txt |sed '2,5d' #删除2-5行
nl test.txt |sed '5d' #删除第2行
nl test.txt |sed '5,$d' #删除第5行到最后一行
nl test.txt |sed '5,$d' #删除第5行到最后一行
image.png
以行为单位的增加
cat test.txt | sed '2a sunran 99999999'| nl #第2行之后插入一行内容
cat test.txt | sed '2i sunran 99999999'| nl #第2行之前插入一行内容
cat test.txt | sed '2i sunran 99999999\nsunran8888888'| nl #插入多行,注意中间的\n为换行符
image.png
以行为单位的替换
cat test.txt | sed '2c sunran 99999999'| nl #替换第2行的内容为 sunran 99999999
cat test.txt | sed '2c sunran 99999999'| nl #替换2,5行的内容,注意替换后只保留一行
image.png
以行为单位的显示
cat test.txt | sed -n '2,5p' #显示2到5行的内容
数据的搜寻并显示
nl test.txt | sed '/TCGA/p'
image.png
如果root找到,除了输出所有行,还会输出匹配行。
nl test.txt | sed -n '/TCGA/p'
数据的搜寻并删除
nl test.txt | sed '/TCGA-DD/d'
image.png
数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并替换
注意c是整行替换,而s是行为单位进行部分数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
nl test.txt | sed 's/TCGA-DD/sunran/g'
image.png
数据的搜寻并执行命令
nl test.txt| sed '/TCGA/{s/TCGA/sunran/}'
搜索含有TCGA的行,并执行{}的内容
例如,搜索含有TCGA的行,执行{s/TCGA/sunran/},即替换TCGA为sunran
多点编辑
一条sed命令,删除text第10行到末尾的数据,并把TCGA替换为sunran
sed -e '10,$d' -e 's/TCGA/sunran/g'
image.png
直接修改文件内容(危险动作)
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!
把一行的中TCGA含有
sed -i 's/TCGA/8888888/g' test.txt
sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
image.png
提取间断行
nl test.txt| sed -n 2~4p #显示第二行开始,每间隔4行
image.png
在命令行上使用多个编辑器命令
使用-e选项可以执行多个命令
sed -e 's/brown/green/; s/dog/cat/' data1.txt
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
两个命令都作用到文件中的每一行数据上。命令之间必须用分号隔开,并且在命令末尾与分号之间不同有空格。
从文件中读取编辑器命令
如果有大量要处理的sed命令,将其单独放入一个文本中会更方便,可以用sed命令的-f选项来指定文件。
cat script1.txt
s/brown/green/
s/fox/elephant/
s/dog/cat/
sed -f script1.txt data1.txt
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
这种情况不用在每个命令后面放一个分号,sed知道每行都有一条单独的命令。
网友评论