sed参数的详细说明

  • Post author:
  • Post category:其他


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 ‘$=


关闭菜单