Sed命令学习

介绍

sed 是一种新型的,非交互式的编辑器。它能执行与编辑器 vi 和 ex 相同的编辑任务。sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。 sed
编辑器没有破坏性,它不会修改文件,除非使用 bash 重定向来保存输出结果。默认情况下,所有的输出行都被打印到屏幕上。

命令格式

sed [options] 'command' 输入文本/文件

选项

选项 说明
-n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印 被 sed 特殊处理的行
-e 多重编辑,且命令顺序会影响结果
-f 指定一个 sed 脚本文件到命令行执行,
-r Sed 使用扩展正则
-i 直接修改文档读取的内容,不在屏幕上输出

定位模式

类型 介绍
first~step first 指起始匹配行,step 指步长,例如: sed -n 2~5p 含义:从第二行开始匹配,隔 5 行匹配一次,即 2,7,12.......。
$ 表示匹配最后一行
/REGEXP/ 表示匹配正则那一行,通过//之间的正则来匹配,正则模式参考底下
\cREGEXPc 表示匹配正则那一行,通过\c 和 c 之间的正则来匹配,c 可以是任一字符
addr1,add2 定址 addr1, add2 决定用于对哪些行进行编辑
addr1,+N 从 addr1 这行到往下 N 行匹配,总共匹配 N+1 行

正则表达式

元字符 功能 示例 示例的匹配对象
^ 行首定位符 /^love/ 匹配所有以 love 开头的行
$ 行尾定位符 /love$/ 匹配所有以 love 结尾的行
. 匹配除换行外的单个字符 /l..e/ 匹配包含字符 l、后跟两个任意字符、再跟字母 e 的行
* 匹配零个或多个前导字符 /*love/ 匹配在零个或多个空格紧跟着模式 love 的行
[] 匹配指定字符组内任一字符 /[Ll]ove/ 匹配包含 love 和 Love 的行
[^] 匹配不在指定字符组内任一字符 /[^A-KM-Z]ove/ 匹配包含 ove,但 ove 之前的那个字符不在 A 至 K 或 M 至 Z 间 的行
(..) 保存已匹配的字符
& 保存查找串以便在替换串中引用 s/love/**&**/ 符号&代表查找串。字符串 love将替换前后各加了两个**的引用,即 love 变成**love**
< 词首定位符 /<love/ 匹配包含以 love 开头的单词的行
> 词尾定位符 /love>/ 匹配包含以 love 结尾的单词的行
x 连续 m 个 x /o{5}/ 分别匹配出现连续 5 个字母 o、至少 5 个连续的 o、或 5~10 个 连续的 o 的行
x 至少 m 个 x /o{5,}/
x 至少 m 个 x,但不超过 n 个 x /o{5,10}/

操作命令

命 令 说 明
a|在当前行后添加一行或多行
c|用新文本修改(替换)当前行中的文本
d 删除行
i|在当前行之前插入文本
h 把模式空间里的内容复制到暂存缓存区
H 把模式空间里的内容追加到暂存缓存区
g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
q 结束或退出 sed
r 从文件中读取输入行
! 对所选行意外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符转换为另一字符(不能对正则表达式使用 y 命令)

操作实例展示

cat << EOF > ceshi.txt   
northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13
EOF
  1. 打印
#安静模式下打印含有`north`的行
sed -n '/north/p' ceshi.txt
  1. 删除
#删除第三行
sed '3d' ceshi.txt
#删除第三行到结尾
sed '3,$d' ceshi.txt
#删除所有含有north的行
sed '/north/d' ceshi.txt
  1. 替换
#将所有含有west的字母替换为north
sed 's/west/north/g' ceshi.txt
#替换以west开头的字母为north
sed -n 's/^west/north/p' ceshi.txt
#当“与”符号(&)用在替换串中时,它代表在查找串中匹配到的内容时。这个示例中所有以 2 位数结尾的行后面都被加上.5。
sed 's/[0-9][0-9]$/&.5/' ceshi.txt
#文件中出现的所有的 Hemenway 都被替换为 Jones,只有发生变化的行才会打印出来。选项-n 与命令 p 的组合取消了默认的输出。标志 g 的含义是表示在行内全局替换。
sed -n 's/Hemenway/Jones/gp' ceshi.txt
#紧跟在 s 命令后的字符就是查找串和替换串之间的分隔符。分隔符默认默认为正斜杠,但可以改变。无论什么字符(换行符,反斜线除外),只要紧跟在 s 命令,就成了新的串分隔符。这个方法在查找包含正斜杠模式时很管用,例如查找路径名或生日。
sed 's#3#88#g' ceshi.txt
  1. 多重替换
#选项-e 用于进行多重编辑。第一重编辑编辑删除第 1~3 行。第二重编辑将Hemenway 替换为 Jones。因为是逐行进行这两行编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。例如,如果两条命令都执行的是替换,前一次替换会影响后一次替换。
sed -e '1,3d' -e 's/Hemenway/Jones/' ceshi.txt
  1. 追加
#命令 a 用于之后追加。字符串 Hello, World!被加在以 north 开头的各行之后。如果要追加的内容超过一行,则除最后一行外,其他各行都必须以反斜杠结尾。
sed '/^north/a Hello world!' ceshi.txt
#命令 i 是插入命令。如果在某一行匹配到模式 eastern,i 命令就在该行的上方插入命令中插入反斜杠后面后的文本。除了最后一行,
sed '/eastern/i Hello,world!\
> -----------------------' ceshi.txt
  1. 修改
#c 命令是修改命令。该命令将完整地修改在模式缓冲区行的当前行。如果模式 eastern被匹配, c 命令将其后的文本替换包含 eastern 的行。
sed '/eastern/c Hello,world! \
> ------------------' ceshi.txt
  1. 获取下一行命令
#如果在某一行匹配到模式 eastern, n 命令就指示 sed 用下一个输入行(即包含 AM MainJr 的那行)替换模式空间中的当前行,并用 Archie 替换 AM,然后打印该行,再继续往下处理
sed '/eastern/{n;s/AM/Archie/;}' ceshi.txt 

8.转换

#y 命令把 1~3 行中所有的小写命令字母都转换成了大写。正则表达式元字符对 y 命令不起作用。与替分隔符一样,斜杠可以被替换成其他字符。
sed '1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' ceshi.txt

9.退出

#打印完第 5 行之后, q 让 sed 程序退出。
sed '5q' ceshi.txt

10.实际应用

cat > sed.txt << EOF
 today is nice day
 you can walk out on the street
 it will be import to you
EOF
#替换签名带有空格的
sed 's/^[ ]*//' sed.txt
sed 's/^[[:space:]]*//' sed.txt
#删除文本中空行和空格组成的行及#号注释的行
grep -Ev "^#|^$|^[ ].*" /etc/ssh/ssh_config

参考

posted @ 2021-07-13 16:04  d4peng  阅读(8)  评论(0)    收藏  举报