sed参数的详细说明
sed选项包含 –e,–f,–n.
-e 指定为多项编辑 , –f 后面接sed脚本文件名 -n用于取消打印输出
sed ‘3d’ datafile
删除第3行
sed -n ‘{p;n;}’
打印奇数行
sed -n ‘{n;p;}’
打印偶数行
sed ‘N;s/\n/ /’
单双行合并
sed ‘3,$d’ datafile
删除3行到最后一行,逗号被称为范围操作符
sed ‘s/^[ \t]\+//g’
替换以连续多个空格和制表符开头的内容为空
sed ‘$d’ datafile
删除最后一行
sed ‘/Tom/!d’ file (sh, ksh, bash)
删除所有不包含Tom的行
sed ‘s/west/north/g’ datafile
全局替换west为north,s为替换g为全局
sed –n ‘s/^west/north/p’ datafile
行首为west的替换为north并打印被替换的行
sed ‘s/[0–9][0–9]$/&.5/’ datafile
匹配2个数字结尾的,替换为&(查找串中匹配的内容)后面加.5
sed -n ‘s/\(Mar\)got/\1ianne/p’ datafile
在圆括号里的Mar作为标签1保存在特定的寄存器中,替换串可以\1引用它则Margot被替换为Marianne
sed ‘s#3#88#g’ datafile
紧跟s的字符就是查找串和替换串之间的分隔符,默认为正斜杠,但可以改变,这个方法在查找包含正斜杠的模式时很管用
sed –n ‘/west/,/east/p’ datafile
打印west到下一个east之间的所有行
sed -n ‘5,/^northeast/p’ datafile
打印第5行到moetheast开头的行
sed ‘/west/,/east/s/$/\t *** test ***/’ 1
找出west到east之间的内容替换$结尾 \t制表符 ***test***
northwest NW Charles Main 3.0 .98 3 34 *** test ***
sed –e ‘1,3d’ –e ‘s/Hemenway/Jones/’ datafile
先删除1-3行再替换Hemenway为Jones,前面的先执行有循序关系
sed ‘/northeast/i\test\n’ 1
在匹配到noetheast行的上面插入一行test \n为回车符 i为插入
sed ‘/northeast/c\test’ 1
将匹配到noetheast的行修改为test行 c为修改
sed ‘1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ 1
1-3行小写字符全部替换为大写字符 1,3y为替换
sed ‘/Lewis/{ s/Dalsass/china/ }’ 1
搜索到Lewis之后进行Dalsass替换为china,没有搜索到Lewis则不进行替换
sed -e ‘/northeast/h’ -e ‘$G’ datafile
将northeast缓存,第2个sed匹配到$行尾 然后释放缓存的行 相当与h复制 G粘贴
sed -e ‘/WE/{h; d; }’ -e ‘/CT/{G; }’ 1
简单理解为匹配到WE的行 复制 删除WE的行 第2个sed匹配到CT的行 粘贴
sed -e ‘/WE/h’ -e ‘/CT/x’ 1
包含CT的行被包含WE的行替换
# cat sedding1
1 # My first sed script by Jack Sprat
2 /Lewis/a\
3 Lewis is the TOP Salesperson for April!!\
Lewis is moving to the southern district next month.\
4 CONGRATULATIONS!
5 /Margot/c\
*******************\
MARGOT HAS RETIRED\
********************
6 1i\
EMPLOYEE DATABASE\
–––––––––––––––––––––
7 $d
# sed –f sedding1 datafile
2、匹配Lewis的行后面添加一下3行 a添加在后面
5、匹配Margot的行被下面3行文字替换 c替换
6、在第一行前面插入下面两行 i插入在前面
7、删除最后一行 $删除
#cat sedding2
1 /western/, /southeast/{
/^ *$/d
/Suan/{ h; d; }
}
2 /Ann/g
3 s/TB \(Savage\)/Thomas \1/
4 % sed -f sedding2 datafile
1、匹配western到southeast之间的内容执行删除空行,将匹配Suan的行 寄存在临时缓存区执行删除
2、匹配Ann的行 执行提取临时缓存区的内容执行覆盖.
3、包含TB Savage的行 被替换成 Thomas Savage
____________________________________________________
文本间隔:
——–
# 在每一行后面增加一空行
sed G
# 将原来的所有空行删除并在每一行后面增加一空行。
# 这样在输出的文本中每一行后面将有且只有一空行。
sed ‘/^$/d;G’
# 在每一行后面增加两行空行
sed ‘G;G’
# 将第一个脚本所产生的所有空行删除(即删除所有偶数行)
sed ‘n;d’
# 在匹配式样“regex”的行之前插入一空行
sed ‘/regex/{x;p;x;}’
# 在匹配式样“regex”的行之后插入一空行
sed ‘/regex/G’
# 在匹配式样“regex”的行之前和之后各插入一空行
sed ‘/regex/{x;p;x;G;}’
编号:
——–
# 为文件中的每一行进行编号(简单的左对齐方式)。这里使用了“制表符”
# (tab,见本文末尾关于’\t’的用法的描述)而不是空格来对齐边缘。
sed = filename | sed ‘N;s/\n/\t/’
# 对文件中的所有行编号(行号在左,文字右端对齐)。
sed = filename | sed ‘N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /’
# 对文件中的所有行编号,但只显示非空白行的行号。
sed ‘/./=’ filename | sed ‘/./N; s/\n/ /’
# 计算行数 (模拟 “wc -l”)
sed -n ‘$=