У меня есть файл с именем city.txt, который содержит следующие записи.
Los Santos
San Fierro
Las Venturas
Я хочу напечатать слово до r в San Fierro, поэтому результат будет таким.
San Fier
Как это можно сделать?
Чтобы напечатать часть до последнего r и напечатать только эти строки:
grep с помощью PCRE:grep -Po '.*(?=r)'
.* соответствует жадности и положительному обратному шаблону с нулевой шириной (?=r) убедитесь, что за соответствием следует r. С помощью sed: sed -n 's/r[^r]*$//p'
r[^r]*$ соответствует части с последнего r до конца и заменяется нулевым. С 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
sub@debianmin:~$ grep r city.txt | cut -f 1 -d r
San Fie
Las Ventu
Если вы хотите г [d1! ] используйте эту команду:
sub@debianmin:~$ grep r city.txt | cut -f 1 -d r | head -n 1
San Fie
В grep, используя Perl lookahead:
grep -Po '.*(?=r)'
Это ищет строку, за которой следует r, но сам r не сопоставляется.