2 次使用管道的 grep 调用未按预期工作

Sho*_*hon 2 linux grep pipe

我想出了以下命令: grep 'rtl' reg_list.txt | grep -E -o -n "id_\w+" reg_list.txt

这个想法是首先 grep 包含 rtl 内容的行,然后只 grep 以 id_ content 开头的单词。这些数据在表中,第一列包含 rtl,第二列包含 id_ 数据。

问题是,第一个 grep 的结果没有传递给第二个。

reg_list.txt 由不同类型的数据组成,例如行、带有列和行的表。

Kus*_*nda 5

第一结果grep 传递到第二grep,但自从你给第二个grep文件名,它不会读它(它会从文件读取代替)。

反而:

grep 'rtl' reg_list.txt | grep -E -o -n 'id_[[:alnum:]]+'
Run Code Online (Sandbox Code Playgroud)

我也改成\w[[:alnum:]]因为\w是 PCRE 正则表达式。如果您grep是 GNU grep,则可以保留\w并使用grep -P

  • @αғsнιη 使用`grep`,您可以通过指定`/dev/stdin` 和文件名(它将依次读取每个文件名)来使其读取_both_,但是如果给它一个文件名,则不能让它忽略它。 (2认同)