Извлечь одно слово после определенного слова в одной строке
Как я могу извлечь слово, которое появляется после определенного слова в Linux (csh)?
Точнее, у меня есть файл, который имеет одну строку, которая выглядит так:
[some useless data] --pe_cnt 100 --rd_cnt 1000 [some more data]
Я хочу извлечь число 100
, которое после слова --pe_cnt
.
Я не могу использовать sed, поскольку это работает, только если вы хотите извлечь всю строку. Может быть, я могу использовать awk?
Кроме того, у меня есть несколько файлов, которые имеют разные значения вместо 100
, поэтому мне нужно что-то, что извлекает значение, но не зависит от значения.
Ответы
Ответ 1
С awk
:
awk '{for(i=1;i<=NF;i++) if ($i=="--pe_cnt") print $(i+1)}' inputFile
В основном петля над каждым словом строки. Когда вы найдете первое, что ищете, возьмите следующее слово и распечатайте его.
С grep
:
grep -oP "(?<=--pe_cnt )[^ ]+" inputFile
Ответ 2
Вы можете использовать sed. Просто создайте группу желаний, которые вы хотите сопоставить и замените всю строку группой:
sed -n 's/^.*pe_cnt\s\+\([0-9]\+\).*$/\1/p' file
Ответ 3
Если между --pe_cnt
и 100
существует однопространственный символ, вы можете использовать утверждения lookahead и lookbehind
grep -oP '(?<=--pe_cnt\s)\d+(?=\s+--rd_cnt)'