格式化这个 grep 的正确方法是什么?

格式化这个 grep 的正确方法是什么?

我无法弄清楚\将该命令放在哪里。

grep "^D.*\(A1|A2|A3\)$" input.txt > output.txt

我正在搜索以 a 开头D并以 A1、A2 或 A3 结尾的每一行,该行位于行末。

答案1

您需要转义管道 ( |)。

$ grep "^D.*\(A1\|A2\|A3\)$" <(printf 'D%s\n' A1 A2 A3)
DA1
DA2
DA3

或者使用-E扩展正则表达式的选项,那么您不需要转义任何内容。

$ grep -E "^D.*(A1|A2|A3)$" <(printf 'D%s\n' A1 A2 A3)
DA1
DA2
DA3

答案2

你只需要逃离或酒吧 - 你快到了:

grep "^D.*\(A1\|A2\|A3\)$"

请注意,您也可以使用 egrep 代替所有转义符:

egrep "^D.*(A1|A2|A3)$"

答案3

以下是使用选项和命令sed组合的实现:-np

sed -rn '/^D.*(A1|A2|A3)$/p' in-file
sed -n '/^D.*\(A1\|A2\|A3\)$/p' in-file
sed -n '/^D.*A[1-3]$/p' in-file
  • 选项-r, --regexp-extended:在脚本中使用扩展正则表达式。

  • 选项-n,,--quiet--silent抑制模式空间的自动打印。

  • 命令p:打印当前模式空间。

相关内容