Извлечь одно слово после определенного слова в одной строке

Как я могу извлечь слово, которое появляется после определенного слова в 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)'