поле печати до и после сопоставления шаблона одной строки

Тот факт, что верхний -левый угол заменен на l, горизонтальная линия на qи вертикальная линия на x, указывает на то, что pm2_monit, по-видимому, использует вместо этого символы рисования линий VT100. кодовых точек рисования линий Unicode.

Поскольку pm2 listотображается правильно, я предполагаю, что он правильно использует кодовые точки рисования линий Unicode.

Пробовали ли вы установить флажок Enable VT100 line drawing even in UTF-8 modeв PuTTYNG?

2
06.08.2019, 15:50
4 ответа

решение с grep и sed:

egrep -oh '[a-zA-Z0-9]+\ fn0\ [a-zA-Z0-9]+' testfile | sed 's/ fn0 / /'

0
27.01.2020, 21:51
$ sed 's/.*\(tail[[:digit:]]*\) fn[[:digit:]]*/\1/' file
tail logfile
tail3 logfile1
tail4 logfile2

Выражение sedзаменяет все в каждой строке до некоторой подстроки, соответствующей tailXX fnYYна tailXX(, где XXи YY— некоторые положительные целые числа ).

0
27.01.2020, 21:51

Сperl

$ perl -lane '($i) = grep {$F[$_] eq "fn0"} 0..$#F;
              print "$F[$i-1] $F[$i+1]"' ip.txt
tail logfile
tail3 logfile1
tail4 logfile2
  • -lудалит символ новой строки из строки ввода и добавит его обратно при печати
  • -aразбить строку ввода на основе пробелов, @Fмассив будет содержать данные
  • ($i) = grep {$F[$_] eq "fn0"} 0..$#Fполучить индекс элемента, точное содержимое которогоfn0
  • print "$F[$i-1] $F[$i+1]"распечатать необходимые поля


С sed, который поддерживает ERE

$ sed -E 's/^(.* )?([^ ]+) fn0 ([^ ]+).*/\2 \3/' ip.txt
tail logfile
tail3 logfile1
tail4 logfile2
  • ^(.* )?необязательные поля в начале строки
  • ([^ ]+) fn0 ([^ ]+)захватить поля до и послеfn0(с использованием одного пробела в качестве разделителя полей)
  • .*остаток строки
  • \2 \3обязательные поля в выводе
3
27.01.2020, 21:51

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

awk -v pattern="fn0" '{for (i=0;i<=NF;i++) {if ($i==pattern) print $(i-1),$(i+1) }}' file

или если вы хотите использовать шаблон регулярного выражения:

awk -v pattern="^fn0$" '{for (i=0;i<=NF;i++) {if ($i~pattern) print $(i-1),$(i+1) }}' file

Выход:

tail logfile
tail3 logfile1
tail4 logfile2
5
27.01.2020, 21:51

Теги

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