Тот факт, что верхний -левый угол заменен на l
, горизонтальная линия на q
и вертикальная линия на x
, указывает на то, что pm2_monit
, по-видимому, использует вместо этого символы рисования линий VT100. кодовых точек рисования линий Unicode.
Поскольку pm2 list
отображается правильно, я предполагаю, что он правильно использует кодовые точки рисования линий Unicode.
Пробовали ли вы установить флажок Enable VT100 line drawing even in UTF-8 mode
в PuTTYNG?
решение с grep и sed:
egrep -oh '[a-zA-Z0-9]+\ fn0\ [a-zA-Z0-9]+' testfile | sed 's/ fn0 / /'
$ sed 's/.*\(tail[[:digit:]]*\) fn[[:digit:]]*/\1/' file
tail logfile
tail3 logfile1
tail4 logfile2
Выражение sed
заменяет все в каждой строке до некоторой подстроки, соответствующей tailXX fnYY
на tailXX
(, где XX
и YY
— некоторые положительные целые числа ).
С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
обязательные поля в выводе Вы можете использовать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