Как получить текст, который всегда меняется от строки с конкретным текстом?
contentJSON is :-
{"id":"0","name":"inc_timestamp","workspaceId":"37158928","infoJSON":"{a:{\"a\":\"bcd\",\"b\":{\"c\":\"d\"}}}","contentJSON":"{\n \"tasks\": [\n {\n \"name\": \"Input\",\n \"taskType\": \"executeCustomSQLQueryForIncrementalLoad\",\n \"id\": 10,\n \"x\": 95,\n \"y\": 44,\n \"inputConnectors\": [],\n \"outputConnectors\": [\n {\n \"nodeID\": 11,\n \"type\": \"Output\",\n \"name\": \"\"\n }\n ],\n \"argsMap\": {\n \"taskId\": 10,\n \"datasetId\": 49053696,\n \"deltaColumnName\": \"timestamp\",\n \"deltaColumnDataType\": \"timestamp\",\n \"deltaColumnValue\": \"null\",\n \"primaryKeysList\": [\n \"id\"\n ]\n },\n \"datasetId\": 49053696\n },\n {\n \"name\": \"Output\",\n \"taskType\": \"saveToES\",\n \"id\": 11,\n \"x\": 453,\n \"y\": 44,\n \"inputConnectors\": [\n {\n \"nodeID\": 10,\n \"type\": \"Input\",\n \"name\": \"\"\n }\n ],\n \"outputConnectors\": [],\n \"argsMap\": {\n \"bizvizcubeId\": 46759937,\n \"cfg\": {\n \"es.mapping.id\": \"id\"\n }\n }\n }\n ],\n \"connections\": [\n {\n \"source\": {\n \"taskId\": 10,\n \"connectorIndex\": 0\n },\n \"dest\": {\n \"taskId\": 11,\n \"connectorIndex\": 0\n }\n }\n ],\n \"isIncrementalLoadModeWorkflow\": 1\n}\n"}
Status:200
{"wokspaceResp":{"success":true,"workspaces":[],"params":"{\"id\":\"49086475\"}"}}
{"wokspaceResp":{"success":true,"workspaces":[],"params":"{\"id\":\"49086475\"}"}}
{"success":true,"workspaces":[],"params":"{\"id\":\"49086475\"}"}
{"id":"49086475"}
wfid is : 49086475
finally wfid is : 49086475
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.136s
[INFO] Finished at: Tue Oct 24 15:30:48 IST 2017
[INFO] Final Memory: 33M/392M
[INFO] ------------------------------------------------------------------------
Я требовал grep 49086475
который меняется каждый раз, когда я выполняю свою программу.
Пожалуйста, помогите мне захватить текст после finally wfid is :
,
5 ответов
Используйте awk:
awk '/finally wfid is :/{print $NF}'
... который печатает последнее поле строки, содержащей finally wfid is :
,
Использование grep
в этом случае:
grep -oP 'finally wfid is : \K.*' <filename>
Объяснение из исходного ответа:
С
grep
и-P
за тоPCRE
(Интерпретировать паттерн как совместимую регулярную экспрессию) и-o
печатать сопоставленный образец в одиночку.\K
notify будет игнорировать подходящую часть перед собой.
Или вы можете использовать sed
в этом случае:
sed -n 's/finally wfid is : //p' <filename>
- Эта команда будет печатать только те строки, которые содержат строку
finally wfid is :
, но он будет заменен пустой строкой.
Несмотря на все опубликованные хорошие решения, я добавлю одно, которое использует только grep
, Я часто в конечном итоге так поступаю из-за своей неспособности запомнить sed
а также awk
команды.
grep 'finally wfid is' input_file | grep -o '[0-9]*'
Первый grep займет правильную строку. Второй использует -o
аргумент, чтобы взять только совпадающую часть строки, которая здесь является чем-либо числовым.
Просто делать:
grep "finally wfid is" <filename> | awk '{print $5;}'
Это выведет номер, который находится только в этой строке. Если вы хотите всю строку, просто опустите awk
,
Мне кажется, что все ответы, опубликованные до сих пор, упустили суть вопроса. Или, может быть, у меня есть. Я понимаю вопрос, чтобы означать
Мне нужно найти текст (восьмизначное число), который появляется после
finally wfid is :
а потомgrep
файл для этого текста.
Отправленные ответы хорошо справляются с первой частью, но не заканчивают работу. ИМХО, ответ Муру самый лучший; Я буду основываться на этом:
grep "$(awk '/finally wfid is :/{print $NF}' contentJSON)" contentJSON
где $(command)
захватывает вывод из command
(в этом случае awk
) и использует его во внешней команде (в данном случае grep
). Я предполагаю из вопроса, что имя файла contentJSON
,