关于Linux里的sed命令。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Linux里的sed命令。相关的知识,希望对你有一定的参考价值。

比如说执行sed ‘s/home/home1’ 1.txt 和 sed -e ‘s/home/home1’ 1.txt ,都是把1.txt这个文件里的home替换为home1,且输出到屏幕上,但是原文件都没改变,那么这两条指令是否是一样的?有什么区别吗?

Sed is a nondestructive editor. It will display the edits you make on your screen, but it will not change the file you are editing. To really reflect the edits in the file, you must redirect the output to another file, and then rename the orginal file
sed的特点就是非破坏(nondestructive),流水行(streamlined),非交互(noninteractive)的编辑器。
非破坏就是指不会修改原文件,它会将修改的结果标准输出到屏幕上,你如果想保存,需要使用IO重定向的方式保存:
如:
sed ‘s/home/home1’ 1.txt >2.txt
这样做的原因是,如果你修改了原文件的话,你没法使用word,vim,txt的undo功能撤销修改,恢复原来的文件。所以,sed会将修改之后的文件输出到屏幕,你看到修改满意的话,再重定向到其他文件。就完成了修改。明白否?
-e是启用多行命令 上述两条编辑命令都是一行命令,所以看不出效果。
参考技术A 首先你的命令有错误,sed的替换命令格式是这样的:'s/A/B/'
最后还需要有一个斜杠,否则会报错。

至于你的问题,sed命令本身默认是不直接修改文件的(为了安全),一般通过重定向的方式将修改保存到另一个文件,如 sed ‘s/home/home1/’ 1.txt >2.txt ,这样结果就在 2.txt 里面。注:s命令默认只替换第一处,如果需要全局替换,这样:sed ‘s/home/home1/g’ 1.txt >2.txt 。
如果你想要直接修改原文件,需要加 -i 选项。sed -i ‘s/home/home1/’ 1.txt

-e 选项的作用是在一行命令里进行多个操作,如 sed -e ‘s/home/home1/’ -e 's/office/office1/' 1.txt 。但你这个例子里只做了一个操作,所以,加不加 -e 都无所谓。
参考技术B 应该是sed ‘s/home/home1/g’ 1.txt这样吧,你试试。不行我再试一试 ,或许没有那个-e

首先sed ‘s/home/home1/g’ 1.txt这样的话,1.txt是不会变的,要加上参数才能改变。-i
sed -i ‘s/home/home1/g’ 1.txt不知道会不会在屏幕上打印。应该不会打印出来。
参考技术C -e主要是处理多条sed命令,你就只有一个替换命令,所以无所谓

linux的seq命令

技术图片

seq 序列

seq 1 5 |tac
技术图片

用vi 或者vim 打开文件的时候
再命令模式下输入
:set nu
会显示行号
技术图片

使用sed 命令来打印某段
数据 -n 表示取消默认打印

sed -n 20,30p tt.txt

技术图片

使用sed 也可以只打印某一行
sed -n 30p tt.txt -n 表示取消默认打印

技术图片

使用awk 命令来实现打印某一段内容 awk 常见的用法 awk ‘ ’ 单引号里的花括号里写 逻辑 NR 表示行号 $0表示
把符合条件的内容打印出来

awk ‘if(NR>19&&NR<31) print $0 ‘ tt.txt

技术图片

总结 sed 擅长行
awk 擅长列

awk -F ":" ‘print $1‘ /etc/passwd 按照 : 分隔符 打印第一列

技术图片

$0 是打印整行

技术图片

sed 修改文件内容 写法 是 sed s###g 文件名 sg 中间三个井号 第一个井号和第二个井号之间是要被替换的内容

第二个井号和第三个井号 之间是要替换成的内容

sed s#oldboylinux#oldboywindows#g ett.txt

技术图片

这里只是修改了输出的内容 原文件内容并没有修改

如果要修改
需要 加参数 -i
sed -i s#oldboylinux#oldboywindows#g ett.txt

技术图片

找到全部文件 然后修改
find / -type f -name "ett.txt"|xargs sed -i s#oldboylinux#oldboywindows#g

技术图片

以上是关于关于Linux里的sed命令。的主要内容,如果未能解决你的问题,请参考以下文章

awk && sed ====linux 三剑客之awk 命令

Linux常用命令:sed

linux关于文件绝对路径的查看命令

关于sed的使用方法

Linux sed 命令

关于linux的sed用法。如何替换特殊字符,如IP=192.168.0.1替换成IP=117.112.3.8