如何打印前一个特定单词

如何打印前一个特定单词

我有一个名为的文件city.txt,其中包含以下条目。

Los Santos
San Fierro
Las Venturas

我想先打印单词r圣菲耶罗,因此输出将是这样的。

San Fier

如何才能做到这一点 ?

答案1

要打印倒数之前的部分r,并仅打印这些行:

  • grep使用 PCRE:

    grep -Po '.*(?=r)'
    

    .*贪婪匹配,零宽度正向前瞻模式(?=r)确保匹配后跟r

  • sed

    sed -n 's/r[^r]*$//p'
    

    r[^r]*$匹配从最后到结束的部分r,并替换为 null。

  • awk

    awk '/r/ {sub("r[^r]*$", ""); print}'
    

    与 相同sed/r/确保我们只对包含以下内容的行进行操作r

例子:

% cat file.txt                                     
Los Santos
San Fierro
Las Venturas

% grep -Po '.*(?=r)' city.txt                
San Fier
Las Ventu

% sed -n 's/r[^r]*$//p' city.txt                   
San Fier
Las Ventu

% awk '/r/ {sub("r[^r]*$", ""); print}' city.txt
San Fier
Las Ventu

答案2

打印直到最后一个的所有内容r

grep -o '^.*r' city.txt

要打印直到第一个的所有内容r

grep r city.txt | grep -o '^[^r]*'

-o仅打印每行的匹配部分。[^r]匹配除之外的任何内容r

如果您只想要第一个匹配项,请-m1在每种情况下将其添加到最后一个 grep。

答案3

显示之前的所有内容r在每一行(不包含r将被忽略):

sub@debianmin:~$ grep r  city.txt | cut -f 1 -d r
San Fie
Las Ventu

如果你只想要圣菲使用此命令:

sub@debianmin:~$ grep r  city.txt | cut -f 1 -d r | head -n 1
San Fie

答案4

在 grep 中,使用 Perl 前瞻:

grep -Po '.*(?=r)'

这将查找一个后跟 的字符串r,但r本身不匹配。

相关内容