我有文本,其中包含一些行。所以,我需要制作几行的 GREP。例如,我有重复的文本,我应该 GREP 获取具有此重复关键字的行。
grep -o "test|test2" textfile
我的文字:
123|never for your|test
123421|never for your|test2
123412|never for your|test3
12341|never for your|test4
12311|never for your|test2
123312312|never for your|test
123321312|never for your|test2
我应该:
123|never for your|test
123421|never for your|test2
123312312|never for your|test
123321312|never for your|test2
它可以工作,但不能按我的意愿工作。它在文本中搜索所有单词“test”和“test2”。但我想获得文本块,比如一些模式,只有在“test”之后才会出现“test2”。你有什么想法吗?
使用 sed 的简短 shell 脚本。列出第二种情况的行号,并与第一种情况的行号进行比较。打印匹配对。使用第一个参数作为文件名。可以很容易地扩展为将第二个和第三个参数作为匹配的模式。可以另存为 findnext.sh,然后运行:
应该很快,因为它只涉及文件的两次传递,并且具有完全可移植的优点。
您可以尝试 grep -E 或 egrep。请像这样尝试
如果你想显示有 test 和 test2 这样的 test|test2 的行,请执行此操作
awk
可能是您的工具:一般形式是:
但是由于命令块默认为打印,所以只有开始和结束模式就可以了。
查看
man awk
或Gnu Awk 用户指南了解更多详细信息。在 grep 手册中
该命令
grep -Pzo ".*test$\n.*test2$" in.txt
也有效,但在手册中是“这是高度实验性的, grep -P 可能会警告未实现的功能。”