Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
参考了
①② ③④⑤⑥⑦⑧⑨⑨
sed [-hnV][-e<script>][-f<script文件>][文本文件]
sed 2q ./testfile
表示到第二行后就输出下面之列出了可以参考的,还有很多,可以参考官方文档
printf '%s\n' aaa bbb ccc | sed =# 执行文件seq 3 | sed '2r/etc/hostname'
建立一个数据文件,用来作实验.
mkdir testcd testtouch testfilevim testfile
输入下面的内容
line1 HELLO LINUX!line2 Linux is a free unix-type opterating system.line3 This is a linux testfile!line4 Linux test
使用下面命令进行:
-n
一起使用# 第三行后面输出aaa bbbsed 3a'new Line' ./testfile# 功能同上sed -e 3a'aaa bbb' ./testfile# 在第三行前面添加sed 3i'new Line' ./testfile# 替换第三行sed 3c'new Line' ./testfile# 删除第三行sed 3d ./testfile# 只输出第三行sed -n 3p ./testfile# 每行都后面输出sed a'aaa bbb' ./testfile
下面是输出的例子
line1 HELLO LINUX!line2 Linux is a free unix-type opterating system.line3 This is a linux testfile!new Lineline4 Linux test
如果要添加换行,可以使用\n
具体用法如下:
2,5
表示开始与结束行号nl ./testfile
这个命令会给输出的内容添加一个行号。# 第二与三行后面输出aaa bbbsed 2,3a'new Line' ./testfile# 在第二与三行前面添加sed 2,3i'new Line' ./testfile# 替换第二第三行,只会替换出一行sed 2,3c'new Line' ./testfile# 删除第二第三行sed 2,3d ./testfile# 只输出第二第三行sed -n 2,3p ./testfile# 只输出第二行到最后一行sed -n '2,$p' ./testfile
/要搜索的内容/
,通过斜杠来表示要搜索的内容
/test/p
表示输出,可以加上-n# 查找包含test的行,并输出。sed -n /test/p ./testfile# 在第二与三行前面添加sed /test/i'aaa bbb' ./testfile# 在第二与三行后面添加sed /test/a'aaa bbb' ./testfile# 替换找到的行sed /test/c'find line' ./testfile# 删除的行sed /test/d ./testfile
①② ③
sed 's/要被取代的字串/新的字串/g'
下面是一些例子
# 将test替换成--sed s/test/--/g ./testfile
下面做一个替换IP
地址的例子。这里使用到一个正则表达式:.*
表示左右的,这里一定要加上逗号。
echo 'inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0'>ip# 删除ip地址前的内容:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0more ip | grep 'inet addr' | sed s/^.*addr://g# 删除addr后的内容:192.168.1.100more ip | grep 'inet addr' | sed s/^.*addr://g | sed s/Bcast.*$//g'
# 查询包含2或者4的行sed -n '/[2,4]/p' ./testfile# 查找有空格并且后面跟着i或者psed -n '/ [i,t]/p' ./testfile
-i
添加这个文件就是替换文件中的内容,但是要慎用。
准备数据
touch writefilevim writefile
数据内容如下
runoob.google.taobao.facebook.zhihu-weibo-
进行操作
# 不写入文件sed 's/\!$/\./g' ./writefile# 加引号与不加引号有很多区别sed -i 's/\!$/\./g' ./writefilecat ./writefilesed '$anewline' ./writefile# 在最后追加一行sed -i '$a---newline' ./writefile# 删除最后一行sed -i '$d' ./writefile
$ seq 6 | sed '1d3d5d'246$ seq 6 | sed -e 1d -e 3d -e 5d246$ seq 4 | sed '{1d;3d}'24$ seq 6 | sed '{1d;3d};5d'246
bash
环境$ sed '2{N;s/\n//;}' ./testfileline1 HELLO LINUX!line2 Linux is a free unix-type opterating system. line3 This is a linux testfile!line4 Linux test
另外一个例子
$ cat 1.txtthis \is \a \long \lineand another \line$ sed -e ':x /\\$/ { N; s/\\\n//g ; bx }' 1.txtthis is a long lineand another line