Linux命令之sed

一、sed的语法命令格式

sed  [选项]   sed编辑命令   输入文件
shell 命令  |  sed  [选项]   sed编辑命令 
sed  [选项]   -f  sed脚本文件   输入文件

1.sed的常用选项
-n:只显示匹配处理的行(否则会输出所有)
-e:执行多个编辑命令时(一般用;代替)
-i:直接在文件中进行修改,而不是输出到屏幕
-r:支持扩展正则表达式
-f:从脚本文件中读取内容并执行(文件中的编辑命令每行一个,不用;隔开)
2.sed的常用编辑命令
p:打印匹配行 print
d:删除指定行 delete
a:在匹配行后面追加 append
i:在匹配行前面插入 insert
c:整行替换
r:将文件的内容读入 read在这里插入代码片
w:将文本写入文件 write
s:字符串替换(匹配正则表达式)substitution
①sed的p命令示例
sed -n ‘/模式/p’ 输入文件
这里的模式可以是正则表达式也可以是精确字符
模式用/括起,扩展正则要加 -r选项

sed -n '/bash/p' /etc/passwd  #显示包含bash的行
sed -rn '/^#/!p' /etc/grub.conf  #不显示#号开头的
df -h | sed -n '/\/$/p'  #显示以/结尾的行
ifconfig -a | sed -n '/^[[:alpha:]]/p'  #显示以字母开头的行
sed -n ‘行号1,行号2p’  输入文件
sed -n 2,3p /etc/passwd     #显示2到3行
sed -n ‘10p’ /etc/passwd    #显示第10行
sed -n ‘$p’ /etc/passwd       #显示最后1行
sed -n '2,+2p' /etc/passwd   #显示234行
sed -n ‘3,100!p’ /etc/passwd  #不显示3到100行

②sed的d命令示例:删除操作可以根据行号和模式匹配进行操作

sed  '3,5d' /etc/fstab  #删除3到5行
sed '/2/d' /etc/fstab  #删除包含数字2的行
sed '/ext3/!d' /etc/fstab  #除了包含ext3的行都删除 
sed -r '/^$|^#/d' /etc/inittab #删除空行和注释
sed -e '/^$/d' -e '/^#/d' /etc/vsftpd/vsftpd.conf 
sed '/^$/d  ;   /^#/d' /etc/vsftpd/vsftpd.conf 

③sed的a命令示例:追加操作可以根据行号和模式匹配进行操作

sed '1a 1111111111111111' /etc/fstab #在第一行后面追加后面的字符串
sed '/boot/a 1111111111111' /etc/fstab #在包含boot的行下面追加后面的字符串

④sed的i命令示例:插入操作可以根据行号和模式匹配进行操作,-i选项是直接修改文件,小心使用

sed '$i 1111111111111111' /etc/fstab #在最后一行前面插入后面的字符串
sed '/defaults/i 1111111111111' /etc/fstab  #在包含defaults的行前面插入后面的字符串

⑤sed的c命令示例:更改整行操作可以根据行号和模式匹配进行操作

sed '/id:/c id:5:initdefault:' /etc/inittab #将id:所在的行整行替换成后面的字符串
sed '3c ONBOOT=no' ifcfg-eth0 #将第三行改成后面的字符串

⑥sed的r命令示例:读入操作可以根据行号和模式匹配进行操作

sed '$r /etc/hosts' /etc/fstab  #在fstab文件的末尾后面读入hosts文件的内容
df -h | sed '/dev\/sda1/r /etc/mtab'  #在/dev/sda1后面读入mtab文件的内容

⑦sed的w命令示例:写入文件操作可以根据行号和模式匹配进行操作

sed '1w abc.txt' /etc/passwd  #将文件的第一行写入abc.txt
sed '/^#/!w abc.txt' /etc/inittab  #将所有不是#开头的行都写入abc.txt
sed -r '/^#|^$/!w  abc.txt' /etc/vsftpd/vsftpd.conf  #将配置文件中除了空行和注释都写入abc.txt

⑧sed的s命令语法格式
sed -n [行号或模式]s/查找内容/替换内容/[替换标记] 文件
替换操作可以根据行号和模式匹配进行操作
替换标记有四种
数字:替换每行的第几个
g:全局替换,否则只替换第一个字符串。例如ng从第n个开始替换
p:显示被执行替换操作的行和-n合用
w:将执行替换操作的行输出到指定文件

sed -n 's/root/ROOT/2p' /etc/passwd  #将文件中每行的第2个root替换为ROOT
sed '/^id/s/:3:/:6:/' /etc/inittab  #将文件中找到以id开头的行中的第一个:3:替换成:6: 
sed  '/^local_enable/s/YES/NO/'  vsftpd.conf  #禁止本地用户登陆 
sed 's/:/\n/g' /etc/passwd  #将文件中的:号替换为换行符
sed 's/bash/nologin/ ; s/sbin/bin/' /etc/passwd  #将文件中bash替换成nologin,同时将sbin替换成bin
sed -n '2,10s/^/#/p' /etc/passwd  #在2到10行前面加上注释
sed -n 's/$/?/p' /etc/passwd  #在每行末尾加上?
sed的s命令可以使用任意分隔符作为定界符
sed  -n '/^hello/s/\/bin\/bash/\/sbin\/nologin/p' /etc/passwd
sed  -n '/^hello/s|/bin/bash|/sbin/nologin|p' /etc/passwd
sed  -n '/^hello/s:/bin/bash:/sbin/nologin:p' /etc/passwd 

二、特殊用法
1.sed的命令中包含变量

var1="root"
sed "/$var1/c aixocm" file1 #使用双引号

2.sed的命令中有多次操作(分号;或者-e选项分割)

sed -e 's/localhost/www/' -e 's/127/192/' /etc/hosts 
sed 's/localhost/www/; s/127/192/' /etc/hosts
sed '{s/localhost/www/; s/127/192/}' /etc/hosts

3.sed的命令中取反操作

sed '$!d' /etc/passwd 
sed '2,10!a 111111111' /etc/passwd

4.sed的命令中&的用法:&用于表示替换命令中的匹配模式

echo 'I have a fat cat' | sed 's/.at/".at"/g'
I have a ".at" ".at”
echo 'I have a fat cat' | sed 's/.at/"&"/g' 
I have a "fat" "cat"
sed -rn 's/\<[0-9]{3}\>/&0/gp' /etc/passwd  #将所有三位数字后面加个0

5.sed的s命令中支持\t \n

sed -n 's/^xixi/\n1111111111111111/p' /etc/passwd
sed -n 's/^xixi/\t1111111111111111/p' /etc/passwd
sed 's/^abrt.*/&\n/' passwd 

6.sed的命令中标签的用法
标签:sed使用圆括号定义替换模式中的部分字符
标签可以方便在后面引用,每行指令最多使用9个标签

sed -r 's/(^[[:alnum:]]+)(.*)/\1/' /etc/passwd #显示文件的第一列
sed -r 's/(^[[:alnum:]]+)(.*)/\2/' /etc/passwd  #删除文件的第一列
echo aaa bbb ccc | sed -r 's/([a-z]+) ([a-z]+) ([a-z]+)/\3 \2 \1/'  #输出ccc bbb aaa

7.sed命令疑难问题

sed -ri '/^H+/a 11111111111' /etc/sysconfig/network
sed -ir '/^H+/a 11111111111' /etc/sysconfig/network  #-i选项后面的字符被当做是备份文件的后缀
### 回答1: sed是一个强大的文本处理工具,常用于从标准输入或文件中读取文本,进行编辑和转换,并将输出写入标准输出或文件中。 以下是sed常用的命令选项: 1. -n:只显示经过sed编辑的行 2. -i:直接修改文件内容,不输出到终端 3. -e:允许多个命令一起执行 4. -f:从文件中读取sed命令进行处理 以下是sed常用的命令: 1. s:替换。语法为:s/要替换的内容/替换后的内容/g,其中g表示全局替换。 2. p:打印。将指定的行或所有行输出到终端。 3. d:删除。删除指定的行或所有行。 4. a:追加。在指定行后面添加新的内容。 5. i:插入。在指定行前面插入新的内容。 6. w:写入。将指定行写入到文件中。 举例说明: 1. 将文件中的所有"cat"替换为"dog":sed -i 's/cat/dog/g' file.txt 2. 只显示文件中包含“hello”的行:sed -n '/hello/p' file.txt 3. 删除文件中的第3行:sed -i '3d' file.txt 4. 在文件中第2行后面添加一行内容:“hello world”:sed -i '2a hello world' file.txt 5. 将文件中第1行替换为“hello”并保存到另一个文件中:sed '1s/.*/hello/' file.txt > newfile.txt ### 回答2: sed是一种常用的Linux命令,其全称为Stream Editor,用于对文本进行处理和转换。它可以在命令行中以各种方式对文件内容进行修改,包括替换、插入、删除、追加等操作。 sed的基本语法是`s/old/new/`,其中old表示待替换的字符串,new表示替换后的内容。sed命令会读取文件的内容,并对匹配到的old进行替换。如果需要对整个文件进行替换,则需要加上选项`-i`。 除了替换以外,sed还可以实现很多其他的文本操作。例如,通过`d`选项可以删除匹配到的行;通过`i`选项可以在指定行前插入文本;通过`a`选项可以在指定行后追加文本等。 另外,sed命令还可以使用正则表达式来进行模式匹配。通过在替换语句中使用正则表达式,可以对符合特定模式的字符串进行批量替换。 总之,sed是一种非常强大和灵活的文本处理工具,可以方便地对文件内容进行修改和转换,提高工作效率。熟练掌握sed命令可以帮助我们更好地处理和编辑文本文件。 ### 回答3: sed(Stream Editor)是Linux中常用的文本处理工具之一。它可以对文本进行流式编辑,具体操作包括查找、删除、替换、插入行或字符等。 使用sed命令的基本语法为: ``` sed [选项] '动作' 文件名 ``` 其中,选项可以包括: - -n:只显示或处理特定行; - -e:指定要执行的动作; - -f:从指定文件中读取动作。 动作部分可以包括: - 数字n:表示打印第n行; - p:打印匹配行; - d:删除匹配行; - s/old/new/:查找并替换文本; - a\text:在匹配行后插入文本; - i\text:在匹配行前插入文本。 以下是一些常用的sed命令示例: - 打印文件内容: ``` sed 'p' file.txt ``` - 删除匹配行: ``` sed '/pattern/d' file.txt ``` - 查找并替换文本: ``` sed 's/old/new/' file.txt ``` - 打印指定行数: ``` sed -n 'n' file.txt ``` - 在匹配行后插入文本: ``` sed '/pattern/a\text' file.txt ``` - 在匹配行前插入文本: ``` sed '/pattern/i\text' file.txt ``` 通过灵活运用sed命令,我们可以轻松地对文本文件进行各种编辑操作,提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值