Linux SED脚本找到匹配模式的第一行并删除它
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux SED脚本找到匹配模式的第一行并删除它,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1341字,纯文字阅读大概需要2分钟。
内容图文
![Linux SED脚本找到匹配模式的第一行并删除它](/upload/InfoBanner/zyjiaocheng/961/b05f48bc32b84cecb12ddd0aa6ee2fc1.jpg)
我想创建一个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脚本找到匹配模式的第一行并删除它全部内容,希望文章能够帮你解决Linux SED脚本找到匹配模式的第一行并删除它所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。