получить строку после поиска другой строки

с использованием ln -s и связыванием остальных сработало. Благодарю.

0
01.10.2020, 14:56
4 ответа

Использовать grep с oE

grep -oE "\-Number(.*?)\s-" | grep -oE [[:digit:]]+

-или -> для вывода только совпадающих строк -E -> Расширенное регулярное выражение

0
18.03.2021, 23:01

Возможно, более безопасным и простым решением было бы использование возможностей фильтрации, предоставляемых инструментом, который вы используете для составления списка процессов.

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

sed -n -e 's/.*[[:blank:]]\{1,\}-Number[[:blank:]]\{1,\}\([0123456789]\{1,\}\).*/\1/p'

Когда строка содержит один или несколько пробелов, за которыми следует литерал -Number, за которым следует один или несколько пробелов, за которыми следует одна или несколько цифр, вся строка заменяется захваченной последовательностью цифр (, часть которой заключена в\(\))и печатается результат.
Обратите внимание, что если приведенная выше последовательность повторяется более одного раза в строке, печатается только первое число.

Более краткая альтернатива AWK, предполагающая, что -Numberи следующая последовательность цифр разделены одним пробелом, как показано в вашем образце данных:

awk -v RS=' ' '/^-Number$/ { getline; print; }'

При этом каждая отдельная -строка, разделенная -пробелом, рассматривается как запись. Когда найдена запись, состоящая именно из строки -Number, считывается и печатается следующая.

1
18.03.2021, 23:01

Использованиеawk

awk '{print $21}'

Где $21— это позиция, в которой находится ожидаемый результат, учитывая, что разделителем по умолчанию является пробел.

$ echo "User 18870     1  1 09:44 ?        00:03:11 java -DENV_SYSTEM_DETAILS=linux-gnu2.6.32 -DENV_PROJECT_NAME=TEST -DENV__APP_PATH=/opt/enterprise/V2.0 -DENV_DATABASE_PATH=/opt/ORACLE11G -Dswing.aatext=true -Xms512m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=128m -XX:+OptimizeStringConcat -DsuppressSwingDropSupport=true  -Number 1234 -c 1234-SM" | awk '{print $21}'
1234
2
18.03.2021, 23:01

С GNU grepили совместимым:

ps -wwAo args= | grep -Po '^java.* -Number\s+\K\S+'

-o— это расширение GNU grep, которое указывает ему выводить совпадающие части, а не строки, в которых есть хотя бы одно совпадение.

-P— это еще одно расширение GNU grep, которое говорит ему использовать perl -совместимые регулярные выражения вместо основных регулярных выражений.

\K— это оператор регулярного выражения Perl, который сбрасывает начало совпадающей части.Таким образом, совпадающая часть будет последовательностью из одного или нескольких(+)не -пробельных символов (\S), следующих за -Number<whitespaces>.

ps -Ao args=— это команда POSIX для вывода списка всех аргументов всех процессов (, объединенных пробелами ). -wявляется расширением, поддерживаемым несколькими psреализациями, чтобы сделать его шире (, так как многие psреализации в противном случае обрезают его ).

1
18.03.2021, 23:01

Теги

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