我有一个包含这些行的文件:
SOME COMMAND 34 XXXXX ;
; a comment which may contain a :
sometext001 : X00 : 1 ;
: X01 : 1 ;
: X11 : 1 ;
并想sometext001
用 grep/egrep 检索。
使用正则表达式^\s*[^:\s;]+\s*:
(换句话说:从行首开始,有一些或没有空格,后跟至少一个字符,不是空格、冒号或分号,然后是一些或没有空格,然后是冒号)
如果启用多行支持,我可以使用在线正则表达式测试器http://regexr.com?35eam匹配文本(包括以下内容:)。
我的印象是 grep/egrep 无论如何都是逐行工作的,那么为什么在包含此示例的文件上与 egrep 一起使用时,正则表达式不起作用?
是否有另一种方法可以使用 egrep 获得所需的结果,或者,如果这不可能,则使用另一个可从 shell 脚本调用的单行代码?
更新:虽然建议更改正则表达式以^[[:space:]]*[^[:space:];]+[[:space:]]*:
匹配指定的行,但它仍然匹配该行中的两次,一次是sometext001 :
一次,一次X00 :
是在使用 egrep 的 -o 选项时很明显。如何解决这个问题?
更新:测试文件包含上面给出的文本。命令行是egrep -o '^([[:space:]]*[^:[:space:];]+[[:space:]]*:)' test.txt
(也尝试过没有 () 对)。输出是
sometext001 :
X00 :