我正在学习正则表达式。我试图在文件中打印包含特定字符串但不包含其他字符串的行。
文件中有几行
k 1 : abcd
jkjkj
l 1 : efgh
kjkjk
m 1 : abok
lklk
我的意图是将行与1 :
匹配,而不将ab
与同一行匹配。
我想要的输出应该是1 : efgh
(此行与1 :
匹配,并且此行不包含ab
)。
为此,我尝试使用正则表达式^((?!ab).*1 :*)*$
。但这是行不通的。有人可以指出我的表达方式在哪里吗?
答案 0 :(得分:1)
该Shell不支持超前。
您可以通过grep
之类的其他程序来传递文本,以获得所需的正则表达式风格(即perl)
cat test.txt | grep --perl '1\s:(?!.*ab)'
返回
l 1 : efgh
答案 1 :(得分:1)
如果您需要整行,请使用awk
:
awk !/ab/' && '/1[[:space:]]:/ inputfile > outputfile
它输出不包含ab
且包含1
+空格+ :
的行。
要获得一行的一部分:
sed -E -n '/ab/!s/.*(1 :.*)/\1/p' inputfile > outputfile
跳过所有包含ab
的行,并使用-n
+ p
选项/标志提取捕获组值。