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