Linux之 sed工具使用

简介:

sed

    Stream EDitor 文本流编辑器, 编辑器


sed工作方式 

wKiom1m1D9fhB8YHAABO5xoQ2AI293.png

wKiom1m1D0WT1cMGAAA4IbtEK8c252.png

wKioL1m1DyDhOOpgAAA6IpFSLLY774.png

wKiom1m1D0bz56khAAA5h7nf7gs984.png

wKioL1m1DyHjJ_PzAAA76jGBRSw451.png


sed基本使用

格式一:

1
2
3
4
5
6
7
8
sed [OPTION ...] [SCRIPT] [FILE...]
 
多个文件处理: 处理完一个,继续处理第二个。
sed script file1 --> sed script file2
 
使用方法基本同vim命令
1 )vim % --> sed 不用指明
2 )vim @@ ##  // --> sed || ,, @@ //

wKiom1m1EIDDM-C0AABRJqCgFs8555.png


格式二:

1
sed   '地址定界command'   FILE ...

1)地址定界

wKiom1m1FCmwPFsfAAAS-s6glds462.png

wKiom1m1FCnDz2VcAAAQ2l7GkpQ243.png

wKioL1m1FAWDyDsJAAAcT-2ncug884.png

wKiom1m1FCqxibc4AABIcFEtJng420.png

wKioL1m1FAWhqAulAAAmkPfBdCs908.png

wKiom1m1FCrj38PWAAAnjMB3nwk769.png

wKioL1m1FAaiH3SRAAAYpujmRoU388.png



2)command

wKiom1m1GxvgsRYDAAAjC3I5CMM740.png

wKioL1m1GvewFoHNAAAiT3zBrZs856.png

wKioL1m1GvezJgVpAAA_mwnwomE635.png

wKiom1m1GxyxqhKVAAA4VZHD39Q626.png

wKiom1m1GxyjuvelAAA3uTPTbEE163.png

wKioL1m1GvjCAFupAAAlIsCagqo525.png

wKioL1m1HJLR1LowAAARKHF2MOA545.png

1
2
3
4
例如:
将文件中的内容插入至指定文件中
# sed  '/^UUID/r /etc/issue'  /etc/fstab
# sed  '1,3r /etc/centos-release'  /etc/issue

wKioL1m1GvjB647jAAAb2YTbrgY507.png

wKiom1m1HOfBr6a7AAAr0UmdVJc700.png

1
2
3
4
例如:
取一个文件的基名、目录名
基名: echo  "/etc/sysconfig/useradd/"  | sed  's,/$,,'  | sed -r  's|(.*/)([^/]+)|\2|' 
目录名: echo  "/etc/sysconfig/useradd/"  | sed  's,/$,,'  | sed -r  's|(.*/)([^/]+)|\2|'

wKiom1m1HR3w0pF0AAA9iq8lXsU376.png

wKioL1m1HQ3x8FguAAAJG1GB_hE836.png

1
2
3
4
5
6
例如:
# echo  "how are you"  | sed -r  's/(how)(.*)(you)/\3\2\1/'
# echo  "how are you"  | sed -r  's@(how)(.*)(you)@\3\2\1@'
# echo  "how are you"  | sed -r  's#(how)(.*)(you)#\3\2\1#'
# echo  "how are you"  | sed -r  's,(how)(.*)(you),\3\2\1,'
# echo  "how are you"  | sed -r  's|(how)(.*)(you)|\3\2\1|'

wKioL1m1HVKjQbayAAAOzJmq1tg687.png

1
2
3
4
5
例如:
[root@localhost bin] # head -n 1 < /etc/passwd | sed 's,root,ROOT,'
ROOT:x:0:0:root: /root : /bin/bash
[root@localhost bin] # head -n 1 < /etc/passwd | sed 's,root,ROOT,g'
ROOT:x:0:0:ROOT: /ROOT : /bin/bash

wKiom1m1HXfC4D7dAAAIwzsipb4173.png

1
2
3
4
5
例如:
[root@localhost bin] # head -n 1 < /etc/passwd | sed 's,rOOt,ROOT,i'
ROOT:x:0:0:root: /root : /bin/bash
[root@localhost bin] # head -n 1 < /etc/passwd | sed 's,rOOt,ROOT,gi'
ROOT:x:0:0:ROOT: /ROOT : /bin/bash

wKiom1m1HXjgf8xzAAAILz07z44835.png

1
2
3
4
例如:
[root@localhost bin] # cat < /etc/passwd | sed -n 's,rOOt,ROOT,ip'
ROOT:x:0:0:root: /root : /bin/bash
operator:x:11:0:operator: /ROOT : /sbin/nologin

wKioL1m1HVOAfcKqAAAPbfJsYGQ821.png

1
2
# sed 's,,,w /PATH/TO/SOMEFILE' FILE
# sed 's,,,' FILE > /PTH/TO/SOMEFILE


练习1:删除/boot/grub/grub.conf文本中所有以空白开头的行行首的空白字符

练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

练习3:echo 一个绝对路径给sed命令:取出其基名,取出目录名


练习1:删除/boot/grub/grub.conf文本中所有以空白开头的行行首的空白字符

1
2
3
4
5
6
CentOS 6:
     # cp /boot/grub/grub.conf /tmp/grub.conf
     # sed -i 's,^[[:space:]]\+,,' /tmp/grub.conf
CentOS 7:
     # cp /etc/grub2.cfg /tmp/grub2.cfg
     # sed -i 's,^[[:space:]]\+,,' /tmp/grub2.cfg

练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

1
2
3
4
5
6
7
# cp /etc/fstab /tmp/a.file
# sed -i -r 's|^#[[:space:]]+||' /tmp/a.file
 
扩展:删除以 #开头,后面没有跟空白字符的行的行首的#
     # cp /etc/fstab /tmp/fstab
     # echo "#hello sed" >> /tmp/fstab
     # sed -i -r 's@^#([^[:space:]].*)@\1@' /etc/fstab


练习3:echo 一个绝对路径给sed命令:取出其基名,取出目录名

1
2
3
4
5
6
7
8
9
10
11
12
测试取出文件名中存在 useradd的绝对路径
     # locate -b useradd
         ...
         /usr/share/man/zh_CN/man8/useradd. 8 .gz
         /usr/share/man/zh_TW/man8/useradd. 8 .gz
         ...
 
取出/usr/share/man/zh_TW/man8/useradd. 8 .gz的基名
     # echo  "/usr/share/man/zh_TW/man8/useradd.8.gz/"  | sed  's,/$,,'  |  sed -r  's#(.*/)([^/]+$)#\2#'
 
取出/usr/share/man/zh_TW/man8/useradd. 8 .gz的目录名
     # echo  "/usr/share/man/zh_TW/man8/useradd.8.gz"  | sed  's,/$,,'  |  sed -r  's#(.*/)([^/]+$)#\1#'


格式三:

1
sed  '地址定界command;地址定界command;地址定界command;...'

wKiom1m1G6GxmPDuAABrv2sac9E011.png

wKioL1m1G53w-f3NAABOi48EL_0841.png










本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1964161,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
505 6
|
11月前
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
7月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
562 16
|
7月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
313 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
9月前
|
缓存 监控 Linux
Linux系统性能调优技巧和相关工具
Linux 作为一种应用应展和系统服务的优选操作系统,在处理性能和端到端点评估上持有出色表现。但是,在处理进程或系统处于低效状态时,性能调优就显得十分重要。本文将探讨一些 Linux 系统性能调优的常用技巧,并介绍相关工具
235 0
Linux系统性能调优技巧和相关工具
|
9月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
932 16
|
8月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。
|
11月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
483 32
|
12月前
|
数据采集 运维 安全
Linux设备命令行运维工具WowKey问答
WowKey 是一款用于 Linux 设备运维的工具,可通过命令行手动或自动执行指令剧本,实现批量、标准化操作,如健康检查、数据采集、配置更新等。它简单易用,只需编写 WIS 指令剧本和 APT 帐号密码表文件,学习成本极低。支持不同流派的 Linux 系统,如 RHEL、Debian、SUSE 等,只要使用通用 Shell 命令即可通吃Linux设备。