sed命令

简介:

a\在当前行后面加入一行文本

d从模板块(Pattern space)位置删除行

i\在当前行上面插入文本

n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令

p打印模板块的行

r file从file中读行

s/re/string用string替换正则表达式re

p表示打印行。

-i:直接修改读取的档案内容,而不是由屏幕输出

-e:command,--expression=command允许多台编辑


元字符集:

^锚定行的开始如:/^sed/匹配所有以sed开头的行

$锚定行的结束 如:/sed$/匹配所有以sed结尾的行

.匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d

*匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行

[]匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed

[^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行

\(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers

&;保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**

\<;锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行

\>;锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行

x\{m\}重复字符x,m次,如:/0\{5\}/匹配包含5个o的行

x\{m,\}重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行

x\{m,n\}重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行




在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest:

sed 's/test/mytest/g' file


sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。


整行替换:

sed 's/^.*$/替换内容/' file (所有行替换掉)

sed '5s/^.*$/替换内容/' file (第5行替换掉)


行首添加字符:

sed 's/^/替换内容/' file


行尾添加字符:

sed 's/$/替换内容/' file

sed 's/$/\ \\/' file  行尾加\,用于sh脚本编译时


文中有完整关键词的一行替换:

sed '/\<查找内容\>/c 替换内容'  file


把24行至36行的每行行首添加#符号:

sed '24,36s/^/#/' file

把24行直至文章最后的每行行首添加#符号:

sed '24,$s/^/#/' file


删除空行:

sed '/^$/d' file

删除文件所有包含test的行:

sed '/test/'d file


删除文件的第二行:

sed '2d' file

删除文件的最后一行:

sed '$d' file

删除文件的第二行到末尾所有行:

sed '2,$d' file

删除倒数第三行,把结果送至文件newfile 
tac file|sed '3d'|tac >newfile

-------------------------------------------------------------------

FILENAME="test"

N=2

#删除第N行

sed ${N}'d'   ${FILENAME}

#删除倒数第N行

sed $(($(cat ${FILENAME}|wc -l)-${N}+1))'d'  ${FILENAME}




替换文件中所有空格:

sed 's/\空格//g' file

替换文件中所有制表符:

sed 's/\t//g' file


n选项和p命令一起使用表示只打印那些发生替换的行

sed -n 's/test/TEST/gp' file

打印第一行:

sed '1p' file


对于test和west之间的行,每行的末尾用字符串test替换:

sed '/test/,/check/s/$/test/' file


下一个:

如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续:

sed '/test/{n;s/aa/bb/}' file


多点编辑:

(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

sed -e '1,5d' -e 's/test/check/' file


从文件读入:

file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。

sed '/test/r file' file


追加命令(单独a\是每行都追加):

被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠

a\ 命令是追加命令,追加将添加新文本到文件中当前行(即读入模式缓冲区中的行)的后面。所追加的文本行位于sed命令的下方另起一行。如果要追加的内容超过一行,则每一行都必须以反斜线结束,最后一行除外。最后一行将以引号和文件名结束。


sed '/^hrwang/a\

>hrwang and mjfan are husband\

and wife' datafile

sed '/^hrwang/ahrwang and mjfan are husband\nand wife' datafile


#如果在datafile文件中发现匹配以hrwang开头的行,则在该行下面追加如下两行

hrwang and mjfan are husband

and wife


插入命令(单独i\是每行都插入):

sed '/test/i\

new line' example

如果test被匹配,则把反斜杠后面的文本newline 插入到匹配行的前面

'














本文转自leonardos51CTO博客,原文链接: http://blog.51cto.com/leomars/1686507,如需转载请自行联系原作者

相关文章
|
6月前
vi编辑器替换字符串命令
vi编辑器替换字符串命令
65 1
|
机器学习/深度学习 存储 监控
sed命令(超详细)
是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命 令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复, 直到文件末尾。
207 0
|
MySQL 关系型数据库 Perl
|
Shell Perl 开发工具