嗨我想要删除一行使用sed,如果它匹配在同一行中的2个正则表达式。 EG行以/开头,以* /(注释)结束。以下脚本将完成大部分工作。 sed -e'/ ^/*/d'-e'/ */$/d'文件名称 该脚本将删除以*开头并以* /结尾的所有行。我希望它只在符合两个标准而不是一个标准时才删除该行。SED:匹配在同一行上的2个模式
2
A
回答
2
尝试
sed '/^\/\*.*\*\/$/ d' filename
这里的关键是,你可以八九不离十将两个正则表达式模式为一体,通过简单地将它们与.*
,其中“任意数量的任何字符的”匹配连接。当然,这强制了两者之间的顺序。第一个模式^\/\*
必须出现在第二个\*\/$
之前,以便匹配此特定模式。
此外,由于*
在正则表达式中有特殊含义,所以一定要逃离你的矩阵,就像你必须逃避你的斜线一样。
0
这剔除了多行注释以及
如
# cat file
blah blah /* comment */
words1
words2
/* multiline
comments
/*
end
$ awk -vRS='*/' '{ gsub(/\/\*.*/,""); }1' file
blah blah
words1
words2
可以在另一台过滤器添加到sed 's|\/\/.*||'
过滤掉//
意见以及
0
为了您的具体问题,你可以做一些事情沿着@echo推荐的路线。但是,如果您需要更通用的解决方案,例如,正则表达式匹配的解决方案不是锚定在行的一端或另一端,或者可能以行中的任一顺序锚定,或者甚至可能重叠,您会像下面的sed脚本:
/regexp1/! b notboth
/regexp2/! b notboth
:both
# sed commands if both patterns match
n
:notboth
# sed commands if at least one pattern doesn't match
n
这使用sed的分支能力。如果模式匹配成功,则b
命令会跳转到指定的标签,模式上的尾部!
会反转匹配的意义。所以,大致上,
把它放在一个文件中,比如foo.sed
,并运行它作为sed -f foo.sed
。
相关问题
- 1. sed在同一行上匹配模式后插入字符串
- 2. 在同一行匹配多个模式
- 3. SED多模式在行内匹配
- 4. 两个上相同sed命令模式匹配
- 5. sed:模式匹配后在N行上执行替换
- 6. 用sed打印每个匹配模式的第一行
- 7. SED提取2次模式匹配后第一次出现
- 8. 如何在匹配模式之前使用sed插入一行
- 9. sed的:一个匹配
- 10. SED删除两个模式匹配之间的行
- 11. 删除使用sed匹配多个模式的行
- 12. sed替换吃不匹配的模式
- 13. 使用sed的空白模式匹配
- 14. Sed提取两种模式之间的第一个匹配
- 15. 试图匹配与grep相同的行上的多个模式
- 16. 在同一行匹配具有n次模式的行
- 17. sed的:在一些字节匹配模式
- 18. sed只有最后一个匹配模式
- 19. Sed匹配模式时插入值
- 20. 匹配模式和追加SED
- 21. SED匹配模式\ tTEXT \ t不工作
- 22. sed:使匹配行上的所有内容小写在模式的右边
- 23. 需要匹配同一行中的多个模式 - Perl
- 24. 如何打印值/值是在匹配模式的下一行使用sed的
- 25. 检测连续两行相匹配的模式sed的
- 26. 使用sed中的变量匹配模式的行
- 27. 不匹配行后多行模式单sed脚本打破
- 28. 删除匹配行的sed
- 29. 匹配模式1和/或模式2
- 30. REGEXP模式匹配2个不同的符号