SED - 显示带有 3 个“x”符号的行

SED - 显示带有 3 个“x”符号的行

我对标题中的任务有疑问。通过使用 SED,我必须显示带有 3 个“x”符号的行。

我知道如何用一个标志来完成它,但我无法为 3 个标志编写工作命令。

输入示例:

   blaxblax 
   xxox
   xxx23
   0x1a
   xxxx

输出:

   xxox
   xxx23

答案1

您需要在这里做的是创建一个匹配的正则表达式:

  • 从行首开始(零个或多个非“x”字符,后跟“x”)3 次
  • 后跟零个或多个非“x”字符,直到行尾

使用 sed 你可以写(假设是 GNU sed)

sed -rn '/^([^x]*x){3}[^x]*$/p'

答案2

短GNUawk方法:

awk -v FPAT='x' 'NF==3' file
  • FPAT- 定义字段值的模式
  • NF- 字段总数(在我们的例子中 -x字符出现的次数)

输出:

xxox
xxx23

答案3

sed -n '/x\{2,3\}/p' test.txt |sed '/x\{4,\}/d'

输出:

xxox
xxx23

答案4

另一种 GNUsed方法

sed -n 's/x/x/3;T;s/x/x/4;t;p'

POSIXly,你可以使用grep,不需要这样做sed

grep -Ex '([^x]*x){3}[^x]*'

grep patternsed '/pattern/!d'尽管 POSIX sed 只理解 BRE,但始终可以这样写:

sed '/^\([^x]*x\)\{3\}[^x]*$/!d'

awk

awk -F x 'NF == 4'

相关内容