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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
108 8
|
2月前
|
监控 Unix Linux
Linux系统工具
Linux系统工具
52 6
|
2月前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
68 5
Linux系统之安装Ward服务器监控工具
|
2月前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
45 2
Linux系统之安装cook菜谱工具
|
1月前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
156 1
|
1月前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
69 1
|
3月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
247 9
Linux文本处理三剑客之sed详解
|
3月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
782 2
|
3月前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令