Как получить определенное слово из txt-файла с помощью grep в терминале Ubuntu

Эти псевдонимы необходимы для правильного функционирования qmail. Дополнительную информацию см. В разделе установки lwq. И ваша проблема FQDN рассматривается здесь

1
задан 23 August 2016 в 23:52

1 ответ

Итак, если вы хотите напечатать поля файла, когда новая строка отделена, если вы начинаете с $, вы можете сделать:

awk '{for(i=1;i<=NF;i++){if($i~/^\$/){printf "%s\n",substr($i,2)}}}' file.txt

Расширенная форма:

awk '{
    for (i=1;i<=NF;i++)
        { if($i~/^\$/)
                { printf "%s\n",substr($i,2) }
        }
     }' file.txt

Здесь мы итерируем по полям (for (i=1;i<=NF;i++)), если поле начинается с $ (if($i~/^\$/)), а затем печатает его с завершающей новой строкой, начиная со второго символа (printf "%s\n",substr($i,2)).

[d4 ]

С другой стороны, если число полей является фиксированным и не много, то sed также является жизнеспособным вариантом, здесь предполагается два поля:

sed -nr 's/^\$([^[:blank:]]+)[[:blank:]]+\$([^[:blank:]]+)$/\1\n\2/p' file.txt

Соответствие $ в начале каждого разделенного пробела поля, захватив поле (([^[:blank:]]+)), затем в замене установите поля в качестве разделителей новой строки (1\n\2).

[d8 ] Расширенная форма:

$ cat file.txt
$PILOT_FIRSTNAME $PILOT_LASTNAME
$FOO $BAR
PILOT_FOO PILOT_BAR

$ awk '{for(i=1;i<=NF;i++){if($i~/^\$/){printf "%s\n",substr($i,2)}}}' file.txt
PILOT_FIRSTNAME
PILOT_LASTNAME
FOO
BAR

$ sed -nr 's/^\$([^[:blank:]]+)[[:blank:]]+\$([^[:blank:]]+)$/\1\n\2/p' file.txt
PILOT_FIRSTNAME
PILOT_LASTNAME
FOO
BAR
5
ответ дан 23 May 2018 в 06:53

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

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