比较每行中 char 出现后的单词

比较每行中 char 出现后的单词

我有一个包含很多行的文件,如下所示。

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

相关内容