Как напечатать предыдущее определенное слово

У меня есть файл с именем city.txt, который содержит следующие записи.

Los Santos
San Fierro
Las Venturas

Я хочу напечатать слово до r в San Fierro, поэтому результат будет таким.

San Fier

Как это можно сделать?

1
задан 28 November 2016 в 13:57

3 ответа

Чтобы напечатать часть до последнего 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
4
ответ дан 23 May 2018 в 03:49
Показать все перед г в каждой линии (линии, которая не содержит г, будут проигнорированы):

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
2
ответ дан 23 May 2018 в 03:49

В grep, используя Perl lookahead:

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

Это ищет строку, за которой следует r, но сам r не сопоставляется.

1
ответ дан 23 May 2018 в 03:49

Другие вопросы по тегам:

Похожие вопросы: