Grep для ведущих пробелов перед требуемым текстом - PullRequest
0 голосов
/ 18 января 2019

Мне нужно grep для имени файла, которое существует между пробелом и расширением файла. Пример:

[meghanak@cycrh6rtp32 CIT]$ echo -e "Akqmskdnlcn shddhjshd.py" | grep "[[:space:]]*.py"
-e Akqmskdnlcn shddhjshd.py

Но я хочу результат как:

shddhjshd.py

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Если вы можете использовать другой инструмент после grep, cut делает это очень просто:

$ echo -e "Akqmskdnlcn shddhjshd.py" | grep "[[:space:]]*.py" \
    | cut -d' ' -f2
shddhjshd.py

Если вам нужно использовать только grep, вы переворачиваете вещи и сопоставляете любой «не пробел», не пробел (\ S), который предшествует «.py», а затем используете флаг -o для вывода совпадения и вот оно:

$ echo -e "Akqmskdnlcn shddhjshd.py" | grep -o "\S*.py"
shddhjshd.py
0 голосов
/ 18 января 2019

с Awk

$echo "Akqmskdnlcn shddhjshd.py" | awk -F' ' '{print $2}'
shddhjshd.py

или

echo "Akqmskdnlcn shddhjshd" | awk -F' ' ' $2 ~ /.*.py/{print $2}'
0 голосов
/ 18 января 2019
$ echo -e "Akqmskdnlcn shddhjshd.py" | grep -o "[^[:space:]]*\.py"
shddhjshd.py

^ - отрицание группы отлова. Работа с [:space:] означает, что символы не пробелы.
-o предназначен только для распечатки соответствующего содержимого.

...