我有一个名为的文件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
本身不匹配。