美好的一天,
我想知道如何打印包含方括号内外数据的行。但是,这种模式只能在方括号之外找到。
模式lipsum2
预期输入
[lipsum1; limpsum6; lipsum1] lipsum2;[lipsum9; limpsum1; lipsum1] lipsum2
[lipsum1; limpsum7; lipsum1] lipsum3;[lipsum10; limpsum1; lipsum1] lipsum3
[lipsum1; limpsum2; lipsum1] lipsum4;[lipsum12; limpsum1; lipsum1] lipsum4
[lipsum1; limpsum2; lipsum1] lipsum5;[lipsum2; limpsum1; lipsum1] lipsum5
预期输出
[lipsum1; limpsum6; lipsum1] lipsum2;[lipsum9; limpsum1; lipsum1] lipsum2
提前感谢任何线索。
注意:我对sed不感兴趣。再次感谢。
答案 0 :(得分:2)
你可以尝试下面的grep命令,
grep -P 'lipsum2(?![^\[\]]*\])' file
匹配lipsum2
仅当[
后面没有任何字符,但不是]
或]
,而不是lipsum2 'lipsum2'
(?! look ahead to see if there is not:
[^\[\]]* any character except: '\[', '\]' (0 or
more times)
\] ']'
) end of look-ahead
符号。
grep -P '^(?!.*\[[^\[\]]*lipsum2[^\[\]]*]).*lipsum2.*' file
或强>
(?!.*\[[^\[\]]*lipsum2[^\[\]]*])
此lipsum2
否定前瞻声明[]
括号内没有字符串lipsum2
。在这种情况下,正则表达式引擎会匹配包含[]
(不在{{1}})字符串中的行。
答案 1 :(得分:1)
问题很模糊,但这样做会
awk '$NF ~ /lipsum2/'
答案 2 :(得分:0)
awk '{s=$0; gsub(/\[.[^][]*\]/,"") ; if($0~/lipsum2/) {print s} }' file
说明:
s=$0 : Save the current line to variable s because gsub changes $0
gsub(/\[.[^][]*\]/,"") : Do a global substitution, look for [ till ] but cannot contain [ or ] in between using inversion in character group , eg [^][]
其余的是自我解释