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 插入到匹配行的前面