首页 > 解决方案 > awk 在模式匹配后打印单个下一个单词

问题描述

这个 Q 是在图案之后打印某些东西的主题的变体。

将有带有单词的输入行。有些行将匹配一个模式,其中该模式将是一个或多个由空格分隔的单词。该模式可能有一个需要遵守的前导/尾随空格。我需要在比赛之后立即打印这个词。

示例输入

The quick brown fox jumps over the lazy dog

Pattern : "brown fox "
Desired output : jumps

该模式只会在一行中出现一次。模式后面总会有一个词。会有没有图案的线条。

awk 或 sed 会很好。

干杯。

编辑 :

我没有正确地问这个问题。模式和下一个单词之间会有一个或多个空格。这打破了安德烈的提议。

    % echo -e "The quick brown fox jumps over the lazy dog\n" | awk -F 'brown fox ' 'NF>1{ sub(/ .*/,"",$NF); print $NF }'
jumps
    % echo -e "The quick brown fox    jumps over the lazy dog\n" | awk -F 'brown fox ' 'NF>1{ sub(/ .*/,"",$NF); print $NF }'

标签: awk

解决方案


免责声明:此解决方案假定如果未找到模式(将有没有模式的行。)打印空行是合适的,如果这不成立,则完全忽略此答案。

我将使用AWK以下方式,让file.txt内容成为

The quick brown fox jumps over the lazy dog
No animals in this line
The quick brown fox   jumps over the lazy dog

然后

awk 'BEGIN{FS="brown fox  *"}{sub(/ .*/,"",$2);print $2}' file.txt

输出

jumps

jumps

说明:我将字段分隔符设置FS"brown fox "后跟任意数量的空格。之后的内容将出现在第二列中,我从第二列中丢弃第一个空格之后的任何内容,包括所述空格,然后打印该列。如果没有匹配,第二列是空的,这些操作会导致空行。


推荐阅读