我有一些文本行的文件。如果它有两个“b”,我需要打印第 3-7 行和第 11 行。我做了
sed -n '/b\{2,\}/p' file
但是它打印了连续两次出现“b”的行
最佳答案
你可以使用
sed -n '3,7{/b[^b]*b/p};11{/b[^b]*b/p}' file
## that is equal to
sed -n '3,7{/b[^b]*b/p};11{//p}' file
请注意 b[^b]*b
匹配 b
,然后是 b
以外的任何零个或多个字符,然后是 b
。第二部分中的 //p
匹配最新的模式,即匹配相同的 b[^b]*b
正则表达式。
请注意,如果您愿意,您也可以使用 b.*b
正则表达式,但括号表达式往往会更快。
查看 online demo ,使用 sed (GNU sed) 4.7
测试:
s='11bb1
b222b
b n b
ww
ee
bb
rrr
fff
999
10
11 b nnnn bb
www12'
sed -ne '3,7{/b[^b]*b/p};11{/b[^b]*b/p}' <<< "$s"
输出:
b n b
bb
11 b nnnn bb
只返回第 3、6 和 11 行。
关于sed - 打印特定字符出现两次或多次的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67952406/