如何使用 grep 在文件中搜索 ---> 有随机列,每列用竖线分隔,每列可能有 2 或 3 个词

How to search inside a file using grep ---> have random column , each column separated by a pipe each column may have 2 or 3 words

示例文件具有以下内容

aaa abc | xwq wqe wqe | qwer wqewqe qeweqwe | 500
qweqw ewqe | hewje hjh | elwl kllk | 300
qwe | wee dsd | wqeqw ewe eww ewe | 200

我们上面有 4 列...我只想用 grep 做,没有其他命令

如何使用 grep 搜索完整的第二列?

如果无法使用 grep 完成。请告诉我最简单的方法。

不幸的是,如果没有其他命令,你无法实现这一点,grep 只处理行,或者换句话说:行。 grep可以做到,它没有这个功能,而其他命令已经完成了。

您可以通过阅读帮助文档来检查这一点,使用命令 man grep

awk {print } file_name会帮助你

并不是说不能grep来完成,但对于这个工具来说,使用非常复杂的正则表达式和non-portable 争论 所以,因为你也说“请告诉我最简单的方法”,你似乎想要的是 cut 存在要做的工作:

$ cut -d'|' -f2 file
 xwq wqe wqe
 hewje hjh
 wee dsd

您可以按照以下方式使用 GNU grep 完成此任务,令 file.txt 内容为

aaa abc | xwq wqe wqe | qwer wqewqe qeweqwe | 500
qweqw ewqe | hewje hjh | elwl kllk | 300
qwe | wee dsd | wqeqw ewe eww ewe | 200

然后

grep -Po '^[^|]*[|]\K([^|]*)' file.txt

给出输出

 xwq wqe wqe 
 hewje hjh 
 wee dsd 

解释:我使用可变长度的正向后视,这迫使我使用 \K,正向后视部分是:行首,除了文字 | 之外的所有内容都重复了 0 次或多次,文字 |, 匹配部分是除文字之外的所有内容 | 重复 0 次或多次。

(在 GNU grep 3.4 中测试)