我有一个包含很多行的文件,如下所示。
123)hfd)jggg)7584)abc
123)))7584)abc
)hfd)jggg)7584)cdf)))abc
)hfd)))abc
我必须在)
[右括号] 第四次出现之后输出带有 abc 的行。所以输出应该是:
123)hfd)jggg)7584)abc
123)))7584)abc
)hfd)))abc
答案1
grep
足够了:
grep -E '^([^)]*\)){4}abc'
这会查找以除“)”之外的任何字符序列开头的行,后跟“)”,重复四次,后跟“abc”。
答案2
在 中awk
,您可以设置任意字段分隔符。在这种情况下,您想用作)
字段分隔符;这可以用 来完成-F')'
。第一个字段是第一个分隔符之前的内容,第二个字段是第一个和第二个分隔符之间的内容,依此类推。您想要查询"abc"
第五个字段 ( $5
) 中的字符串。
awk -F')' '$5 == "abc"' file
awk
逐行工作就像 ——如果满足条件,它将执行命令。如果没有条件,该命令将在每一行执行;如果没有命令,如果满足条件,它将打印整行。'CONDITION { COMMAND }'
答案3
随着GNU sed编辑。尝试在该字符第四次出现时放置一个标记)
,并在下一步中尝试将其删除。成功后打印。
sed -ne '
s/)/\n/4
s/\nabc/)abc/p
' file