sed编辑器
2021-03-12 本文已影响0人
Zee_李海海
sed编辑器会执行下列操作
(1) 一次从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改流中的数据。
(4) 将新的数据输出到STDOUT。
sed命令的格式如下。
sed options script file
选项 | 描述 |
---|---|
-e script | 在处理输入时,将script中指定的命令添加到已有的命令中 |
-f script | 在处理输入时,将file中指定的命令添加到已有的命令中 |
-n | 不产生命令输出,使用print命令来完成输出 |
1. 在命令行定义编辑器命令:
默认情况下,sed编辑器会将指定的命令应用到STDIN输入流上。这样你可以直接将数据通过管道(|)输入sed编辑器处理。这里有个简单的示例。
$echo "This is a test" | sed 's/test/big test/'
This is a big test
编辑处理整个文件
$ cat data1.txt
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
$ sed 's/dog/cat/' data1.txt |cat
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
2. 在命令行使用多个编辑器命令:
要在sed命令行上执行多个命令时,只要用-e选项就可以了。
$ sed -e 's/brown/green/;s/dog/cat/' data1.txt |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 -e '
> s/brown/green/
> s/fox/elephant/
> s/dog/cat/' 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.
必须记住,要在封尾单引号所在行结束命令。bash shell一旦发现了封尾的单引号,就会执行命令。开始后,sed命令就会将你指定的每条命令应用到文本文件中的每一行上。
3. 从文件中读取编辑器命令
最后,如果有大量要处理的sed命令,那么将它们放进一个单独的文件中通常会更方便一些。可以在sed命令中用-f选项来指定文件。
$ cat script1.sed
s/brown/green/
s/fox/elephant/
s/dog/cat/
$ sed -f script1.sed 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.
#我们很容易就会把sed编辑器脚本文件与bash shell脚本文件搞混。为了避免这种情况,可以使用.sed作为sed脚本文件的扩展名。
删除空白行
sed -e '/^\s*$/d' seq.fna #删除文件中的空白行;
修改文件大小写
sed -e 'y/ATCG/atcg/' seq.fna
删除冒号之后的所有内容
sed -e 's/:.*//g' seq.fna