sed匹配

sed正则

sed匹配root字符并打印输出到屏幕显示,-n表示不输出不相关的字符行

[root@localhost tmp]# sed -n '/root/'p passwd    
root:x:0:0:root:/root:/bin/bash
[root@localhost tmp]# sed '/root/'p passwd        sed输出匹配字符会把对应行输出两次并显示出来
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

sed 使用+号匹配多个字符内容,-r表示对特殊字符脱意


[root@localhost tmp]# sed -nr '/o+t/'p passwd 
root:x:0:0:root:/root:/bin/bash

sed输出指定的范围几行内容

[root@localhost tmp]# grep -n '.*' passwd |sed -n '2,5'p
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sed ^ 匹配以某字符开头的内容

[root@localhost tmp]# sed -n '/^s/'p passwd 
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sed  $ 匹配以某字符结尾的内容
[root@localhost tmp]# sed -n '/in$/'p passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

sed -e 多个条件过滤匹配字符
sed -e '1'p -e 'logoin'p -n passwd

[root@localhost tmp]# sed -e '1'p -e '/logoin/'p -n passwd
root:x:0:0:root:/root:/bin/bash

sed删除一行内容,第一行是passwd文件里root用户的内容

[root@localhost tmp]# sed -n '/in$/'p passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

sed 删除三行内容,跟上面对比少了两行内容(bin和daemon)


[root@localhost tmp]# sed '1,3'd passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

sed 删除指定匹配的行,对比上面少了root和adm两行

[root@localhost tmp]# sed '/root\|adm/'d passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sed 替换指定字符,将指定字符小写替换成大写,或者指定字符替换为其他字符

[root@localhost tmp]# sed 's/root/ROOT/g' passwd 
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost tmp]# sed  's/root/tttt/g' passwd 
tttt:x:0:0:tttt:/tttt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

sed 替换指定字符为空,将内容所有数字删除或者将内容的所有字母删除

[root@localhost tmp]# sed 's/[0-9]//g' passwd 
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin

[root@localhost tmp]# sed 's/[a-zA-Z]//g' passwd 
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://

文件内容字段互换,([^:]+)表示非冒号的多个字符,以段分割后再重新排序,这里需要仔细揣摩一下

[root@localhost tmp]# sed -r 's/([^:]+):(.*):([^:]+)/\3\2\1/' passwd 
/bin/bashx:0:0:root:/rootroot
/sbin/nologinx:1:1:bin:/binbin
/sbin/nologinx:2:2:daemon:/sbindaemon
/sbin/nologinx:3:4:adm:/var/admadm

sed 再内容前面添加指定格式字符,使用/(.*)/表示内容一行里的所有内容,表达式后的/holle world:&/ 的意思为:<br/>holle world:为新加入字符,&表示/(.*)/的匹配,在所有/(.*)/匹配行的前面添加Holle world: 添加-r不需要使用脱意字符

[root@localhost tmp]# sed -r 's/(.*)/holle world:&/' passwd 
holle world:root:x:0:0:root:/root:/bin/bash
holle world:bin:x:1:1:bin:/bin:/sbin/nologin
holle world:daemon:x:2:2:daemon:/sbin:/sbin/nologin
holle world:adm:x:3:4:adm:/var/adm:/sbin/nologin

转载于:https://blog.51cto.com/8844414/2136233

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 `sed` 命令可以进行字符串替换。要替换第 N 个匹配的字符串,可以使用以下命令: ``` sed 's/要替换的字符串/替换后的字符串/N' ``` 其中,`N` 表示替换第 N 个匹配的字符串。例如,要将第 2 个匹配的字符串 "apple" 替换为 "orange",可以使用以下命令: ``` echo "I have an apple and you have an apple" | sed 's/apple/orange/2' ``` 输出结果为:`I have an apple and you have an orange`。 注意,这里的替换是在整个字符串中进行的,不是在某一行中进行的。如果你只想在某一行中替换第 N 个匹配的字符串,可以使用 `awk` 命令。 ### 回答2: sed是一种流编辑器,用于处理文本流。要使用sed匹配并替换第N个匹配项,可以使用以下命令: ```shell sed 's/匹配项/替换项/N' ``` 其中,匹配项是要被替换的文本的模式,替换项是要替换成的文本,N是指定替换第N个匹配项。 下面是一个示例,假设有一个文本文件test.txt中有多个apple出现,我们只想替换第4个apple为orange: ```shell sed 's/apple/orange/4' test.txt ``` 执行以上命令后,sed会在test.txt中找到第4个出现的apple,并将其替换为orange。如果test.txt中少于4个apple,sed不会进行替换。 sed命令的输出默认会直接打印在终端上。如果想要修改原始文件,可以使用-i选项,命令如下: ```shell sed -i 's/apple/orange/4' test.txt ``` 这样,替换后的结果将会保存在原始文件test.txt中。 总结一下,使用sed匹配第N个进行替换的命令格式是`sed 's/匹配项/替换项/N'`,其中匹配项是要被替换的文本的模式,替换项是要替换成的文本,N是指定替换第N个匹配项。 ### 回答3: sed命令是一种用于流编辑的Unix工具,可以实现对文本进行查找和替换的功能。虽然原生的sed命令并不直接支持匹配第N个进行替换的功能,但可以通过一些技巧来实现。 基本的sed命令语法是"s/原字符串/要替换的字符串/",其中的 "s" 表示替换操作。如果要匹配并替换第N个字符串,可以通过添加一个计数器来实现。以下是一种可能的解决方案: 1. 首先,我们需要一个能够计数的变量,可以使用awk或者其他辅助工具来实现。假设我们用变量count来计数,初始值为0。 2. 使用sed命令结合正则表达式,匹配需要替换的字符串,并在替换操作的字符串中使用"\n"表示与正则表达式匹配的内容。例如,要匹配第3个出现的字符串,并将其替换为"replacement",可以使用如下命令: sed ':a;N;$!ba;s/regexp/replacement/3' 其中,regexp表示正则表达式,replacement表示替换成的字符串,3表示需要匹配的第3个字符串。 3. 将输出重定向到文件中,即将替换后的结果保存下来,可以使用">"命令将sed命令的输出重定向到指定文件中。 虽然这个方法需要稍微复杂一些,但是可以通过使用变量和一些sed命令的技巧来实现匹配第N个字符串进行替换的功能。 需要注意的是,此方法只适用于替换单个文件中的第N个字符串。如果要替换多个文件,可以使用循环结构和适当的文件名模式来批量替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值