linux 删除行 脚本呢,Linux SED脚本找到匹配模式的第一行并删除它

我想创建一个sed命令,在文件中查找匹配模式的第一行,删除所有该行或将其全部替换为其他文本.我不想匹配所有的行,因为规则是匹配它的一部分.

我怎么能用sed做到这一点?

例如:

myline 1 is pretty

line 2 is ugly

myline 111 is nice

我想删除包含“1 is”的第一行

更新:我的行可能包含“/”和“

问候

FAK

解决方法:

我倾向于使用awk来处理更复杂的任务,它比sed更强大,具有适当的循环和选择结构(为了可读性而扩展,如果你愿意,你可以将它压缩回一行):

pax$echo '

xyz

myline 1 is pretty

line 2 is ugly

myline 111 is nice' | awk '

/1 is/ {if (f) {print} else {f = 1}}

!/1 is/ {print}'

xyz

line 2 is ugly

myline 111 is nice

对于任何不匹配模式的行(!/ 1是/),它只是打印它.

对于与模式匹配的行,如果设置了标志f(它最初未设置),则将它们全部打印出来.当标志未设置且遇到匹配的行时,它会设置标志并不打印它.这基本上根据需要删除第一个匹配行.

如果你想修改第一个匹配的行而不是删除它,你只需在f = 1旁边插入代码即可,例如:

pax$echo '

xyz

myline 1 is pretty

line 2 is ugly

myline 111 is nice' | awk '

/1 is/ {if (f) {print} else {f = 1;print "URK!!!"}}

!/1 is/ {print}'

xyz

URK!!!

line 2 is ugly

myline 111 is nice

要在awk中使用shell变量,可以使用-v选项将其作为真正的awk变量传递:

pax$export xyzvar=URK ; echo '

xyz

myline 1 is pretty

line 2 is ugly

myline 111 is nice' | awk -vmyvar=$xyzvar '

/1 is/ {if (f) {print} else {f = 1;print myvar}}

!/1 is/ {print}'

xyz

URK

line 2 is ugly

myline 111 is nice

标签:linux,sed,full-text-search

来源: https://codeday.me/bug/20190726/1542525.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值