考虑这个示例文件(行号仅供参考):
1 Reference duiarneutdigane uditraenturida enudtiar.
2
3 Reference uiae uiaetrtdnsu iatdne uiatrdenu diaren uidtae
4 on line 23.
5
6 uiae
7
8 uaiernd Reference uriadne udtiraeb unledut iaeru uilaedr
9 uiarnde line 234.我希望匹配每一个字符串,以“引用”开头,以句点结尾(即,ll )。1、3-4和8-9)使用这个grep命令(tst是示例文件):
grep -P '(?s)Reference.*?\.' tst
但是,它只匹配第一行。我当时在想:
(?s),因此.匹配所有字符,包括换行符。.*?应该使星星不贪婪,所以如果它以句点结束,它就不匹配整个文件。\.结尾。我也尝试过awk和grep的-z标志,但无论是每行还是不是所有行都匹配我的表达式。
发布于 2017-02-18 23:16:09
你可以用这个:
grep -Pzo '(?s)Reference.*?\.' tst.txt其中tst.txt是您的输入文件。它和你的一样,但是有两个新的标志。
我添加了-z标志来抑制行尾的换行符,将其替换为null字符。因此,grep知道行尾在哪里,但将输入看作一行。
-o标志意味着它只打印匹配的部分。
我得到了以下输出:
Reference duiarneutdigane uditraenturida enudtiar.
Reference uiae uiaetrtdnsu iatdne uiatrdenu diaren uidtae
on line 23.
Reference uriadne udtiraeb unledut iaeru uilaedr
uiarnde line 234.https://unix.stackexchange.com/questions/346026
复制相似问题