首页 / LINUX / linux三剑客之sed
linux三剑客之sed
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux三剑客之sed,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4873字,纯文字阅读大概需要7分钟。
内容图文
![linux三剑客之sed](/upload/InfoBanner/zyjiaocheng/960/11f90fe906b74780a8121bc99027a57d.jpg)
Linux sed命令是利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法
sed [-hnV][-e][-f][文本文件]
参数说明:
-e或--expression= 以选项中指定的script来处理输入的文本文件。
-f或--file= 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
实例:
在b.txt中5行后面加一句hello word ,并打印输出。
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
结果:
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ sed -e 5a"\hello word" b.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
hello word
200 Incognito Ave.
Suburbia,WA 64890
以行为单位删除。
删除2-4行 b.txt
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ sed '2,4d' b.txt
Jimmy the Weasel
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
替换:
替换2-5行
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt|sed '2,5c hello word'
Jimmy the Weasel
hello word
200 Incognito Ave.
Suburbia,WA 64890
数据的搜寻并显示
$ cat b.txt |sed '/Pleasant/p'
Jimmy the Weasel
100 Pleasant Drive
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt |sed -n '/Pleasant/p'
100 Pleasant Drive
数据的搜寻并删除
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt |sed '/Pleasant/d'
Jimmy the Weasel
San Francisco,CA 123456
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
数据的搜寻并执行命令
搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
1 root?0:0:root:/root:/bin/blueshell
最后的q是退出。
数据的搜寻并替换
[root@liubing ~]# ifconfig
eth4 Link encap:Ethernet HWaddr 08:00:27:DD:A5:28
inet6 addr: fe80::a00:27ff:fedd:a528/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1255 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:85773 (83.7 KiB) TX bytes:3888 (3.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:160 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11904 (11.6 KiB) TX bytes:11904 (11.6 KiB)
[root@liubing ~]# ifconfig lo |grep 'inet addr'
inet addr:127.0.0.1 Mask:255.0.0.0
[root@liubing ~]# ifconfig lo |grep 'inet addr'|sed 's/^.addr:/123/g'
inet addr:127.0.0.1 Mask:255.0.0.0
[root@liubing ~]# ifconfig lo |grep 'inet addr'|sed 's/^.addr:/123/g'
123127.0.0.1 Mask:255.0.0.0
[root@liubing ~]# ifconfig lo |grep 'inet addr'|sed 's/^.addr:/hello word/g'
hello word127.0.0.1 Mask:255.0.0.0
[root@liubing ~]# ifconfig lo |grep 'inet addr'|sed 's/^.addr://g'127.0.0.1 Mask:255.0.0.0
[root@liubing ~]# ifconfig lo |grep 'inet addr'|sed 's/^.addr://g'|sed 's/Mask..*$//g'
127.0.0.1
[root@liubing ~]#
多点编辑:
一条sed命令,删除b.txt第三行到末尾的数据,并把bash替换为blueshel
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
200 Incognito Ave.
Suburbia,WA 64890
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ sed -e '3,$d' -e s/the/hello/g b.txt
Jimmy hello Weasel
100 Pleasant Drive
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$
直接修改文件内容(危险操作)
将.结尾的改为!结尾,修改文件内容
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ sed -i 's/.$/!/g' b.txt
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco,CA 123456
Big Tony
200 Incognito Ave!
Suburbia,WA 64890
在b.txt文件第2行加入hello word;
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ sed -i '2a"\hello word"' b.txt
32639@DESKTOP-9ED5MMN MINGW64 ~/Desktop
$ cat b.txt
Jimmy the Weasel
100 Pleasant Drive
"hello word"
San Francisco,CA 123456
Big Tony
200 Incognito Ave!
Suburbia,WA 64890
sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!
总结:
对于上面的操作,当不加-i的选项时,文件内容不会改变,只不过是输出在终端的内容变了,当加了-i后文件内容会随之改变。
$表示末尾,^表示开头。
内容总结
以上是互联网集市为您收集整理的linux三剑客之sed全部内容,希望文章能够帮你解决linux三剑客之sed所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。