我对标题中的任务有疑问。通过使用 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 pattern
sed '/pattern/!d'
尽管 POSIX sed 只理解 BRE,但始终可以这样写:
sed '/^\([^x]*x\)\{3\}[^x]*$/!d'
和awk
:
awk -F x 'NF == 4'