sed 批量替换文件

1.想把某个目录下包含only-upstage的文件都替换成onlyu-base

sed  -i -e 's/onlyu-upstage/onlyu-base/g'  ` grep -rl onlyu-upstage *`

2. 打印文件中间几行,显示28-38 行中间的内容

# cat /etc/cli.cfg | head -n 38 |tail -n +28
head -n 38 显示38行前面的
tail -n +28 从28行开始显示

# cat /etc/cli.cfg | tail -n +28 |head -n 10
从第28行开始显示,显示前面10行

3. sed 打印匹配内容行号

# sed -n -e '/build/=' /etc/cli.cfg
28

4. sed 打印匹配内容和行号
# sed -n -e '/build/p' -e '/build/=' /etc/cli.cfg
[cli_rebuild]
28

5.有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的

复制代码
[zookeeper@master rh]$ sed -n l test.txt 
this is first line$
this is second line$
this is third line$
this is fourth line$
this	fifth line$
happy everyday$
end$
复制代码

如果是制表符(TAB),那么会显示为 符号,如果是空格,就会原样显示。通过此方法即可以判断制表符和空格了。

这是sed中的用法:l  [n]

用明确的形式显示模版空间的数据:

①、以C-style的转义形式显示不能打印的字符(换行符、制表符等)和本身的Char形式;

②、长的行将进行分割,以字符结尾的行表示分割,以字符$结尾的行表示分割结束。

③、n指定显示行的长度,超过就进行分割;若为0表示不分割所有行;没有指定时就取命令行选项-l的设置,再没有就取默认值70。这是GNU的扩展功能。

其实cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了!如果你设定一个空格为间隔符,使用 -d ' '而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。

原文地址:https://www.cnblogs.com/wangyh702/p/11418248.html