Извлечь одно слово после определенного слова в той же строке, но между ними нет пробела - PullRequest
0 голосов
/ 28 августа 2018

Как мне извлечь слово, которое идет после определенного слова в bash? Точнее, у меня есть файл, строка которого выглядит следующим образом:

IN=../files/d.txt

Я хочу прочитать строку "d" сверху.

awk '{for(i=1;i<=NF;i++) if ($i=="files/") print $(i+1)}' inputFile

этот код не помогает мне, потому что он пытается найти слово за пробелом. но здесь у нас есть «d» после «files /» (продолжить слово) и заканчивается «.»

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Вы можете использовать sed:

sed -n '/\/files\// s~.*/files/\([^.]*\)\..*~\1~p' file

d

Вы также можете использовать команду awk:

awk -F/ '$(NF-1) == "files"{sub(/\..*/, "", $NF); print $NF}' file
0 голосов
/ 28 августа 2018

Использование подстановки шаблонов bash и basename (поскольку ваши входные данные выглядят как имя файла):

basename ${IN%.*}
0 голосов
/ 28 августа 2018

Вы можете использовать оглядываться назад (? <= Match-before здесь) к этому. </p>

 echo "IN=../files/d.txt" | grep -Po "(?<=files\/)\w+"

Результаты:

d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...