Как grep текст, который всегда меняется от строки с определенным текстом?

Вам нужно установить build-essential

sudo apt-get install build-essential

Чтобы выполнить:

 chmod +x VMwarexxxxxxx.bundle 

и

./VMwarexxxxxxx.bundle 
4
задан 27 October 2017 в 12:21

10 ответов

Мне кажется, что все ответы, опубликованные до сих пор, упустили суть вопроса. Или, может быть, у меня есть. Я понимаю, что этот вопрос означает

Мне нужно найти текст (восьмизначное число), который появляется после finally wfid is :, а затем grep файла для этого текста.

Опубликованные ответы делают первую часть в порядке, но не завершают работу. ИМХО, ответ муру - лучший; Я опишу следующее:

grep "$(awk '/finally wfid is :/{print $NF}' contentJSON)" contentJSON

, где $(command) фиксирует вывод из command (в данном случае awk) и использует его во внешней команде (в этом случае, grep). Я предполагаю, что имя файла contentJSON.

1
ответ дан 18 July 2018 в 04:40

Используйте awk:

awk '/finally wfid is :/{print $NF}'

... который печатает последнее поле строки, содержащее finally wfid is :.

8
ответ дан 18 July 2018 в 04:40

Используйте grep следующим образом:

grep -oP 'finally wfid is : \K.*' <filename> Объяснение из исходного ответа: с grep и -P для PCRE (интерпретировать шаблон как Perl- Совместимое регулярное выражение) и -o для печати только одного шаблона. Уведомление \K будет игнорировать согласованную часть, пришедшую перед собой.

Или вы можете использовать sed следующим образом:

sed -n 's/finally wfid is : //p' <filename> Объяснение из исходного ответа: с помощью grep и -P для PCRE (интерпретировать шаблон как регулярное выражение, совместимое с Perl), и -o для печати только сопоставленного шаблона. Уведомление \K будет игнорировать согласованную часть, пришедшую перед собой.
7
ответ дан 18 July 2018 в 04:40

Несмотря на то, что все хорошие решения уже отправлены, я добавлю тот, который использует только grep. Я часто делаю это так из-за моей неспособности запомнить команды sed и awk.

grep 'finally wfid is' input_file | grep -o '[0-9]*'

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

4
ответ дан 18 July 2018 в 04:40

Просто выполните:

grep "finally wfid is" <filename> | awk '{print $5;}'

Это выведет номер, который находится только в этой строке. Если вы хотите, чтобы вся строка просто опускала awk.

3
ответ дан 18 July 2018 в 04:40

Мне кажется, что все ответы, опубликованные до сих пор, упустили суть вопроса. Или, может быть, у меня есть. Я понимаю, что этот вопрос означает

Мне нужно найти текст (восьмизначное число), который появляется после finally wfid is :, а затем grep файла для этого текста.

Опубликованные ответы делают первую часть в порядке, но не завершают работу. ИМХО, ответ муру - лучший; Я опишу следующее:

grep "$(awk '/finally wfid is :/{print $NF}' contentJSON)" contentJSON

, где $(command) фиксирует вывод из command (в данном случае awk) и использует его во внешней команде (в этом случае, grep). Я предполагаю, что имя файла contentJSON.

1
ответ дан 24 July 2018 в 18:08

Используйте awk:

awk '/finally wfid is :/{print $NF}'

... который печатает последнее поле строки, содержащее finally wfid is :.

8
ответ дан 24 July 2018 в 18:08
  • 1
    Незначительное разъяснение, используйте: awk '/finally wfid is :/{print $NF}' <filename> или cat <filename> | awk '/finally wfid is :/{print $NF}'. – pa4080 24 October 2017 в 14:29

Используйте grep следующим образом:

grep -oP 'finally wfid is : \K.*' <filename> Объяснение из исходного ответа: с grep и -P для PCRE (интерпретировать шаблон как Perl- Совместимое регулярное выражение) и -o для печати только одного шаблона. Уведомление \K будет игнорировать согласованную часть, пришедшую перед собой.

Или вы можете использовать sed следующим образом:

sed -n 's/finally wfid is : //p' <filename> Объяснение из исходного ответа: с помощью grep и -P для PCRE (интерпретировать шаблон как регулярное выражение, совместимое с Perl), и -o для печати только сопоставленного шаблона. Уведомление \K будет игнорировать согласованную часть, пришедшую перед собой.
7
ответ дан 24 July 2018 в 18:08

Несмотря на то, что все хорошие решения уже отправлены, я добавлю тот, который использует только grep. Я часто делаю это так из-за моей неспособности запомнить команды sed и awk.

grep 'finally wfid is' input_file | grep -o '[0-9]*'

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

4
ответ дан 24 July 2018 в 18:08

Просто выполните:

grep "finally wfid is" <filename> | awk '{print $5;}'

Это выведет номер, который находится только в этой строке. Если вы хотите, чтобы вся строка просто опускала awk.

3
ответ дан 24 July 2018 в 18:08

Другие вопросы по тегам:

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