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

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 :.

4
задан 27 October 2017 в 02:21

5 ответов

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

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

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

8
ответ дан 23 November 2019 в 11:35

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

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

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

4
ответ дан 23 November 2019 в 11:35

Просто сделайте:

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

Это произведет число, которое находится в одной только той строке. Если Вы хотите целую строку, просто опускают awk.

3
ответ дан 23 November 2019 в 11:35

Использовать grep таким образом:

grep -oP 'finally wfid is : \K.*' <filename>
  • Объяснение из исходного ответа:

    С grep и -P для того, чтобы иметь PCRE (Интерпретируйте шаблон как Совместимое с Perl Регулярное выражение), и -o распечатать один только подобранный шаблон. \K уведомьте проигнорирует подобранную часть, прибывшую перед собой.


Или можно использовать sed таким образом:

sed -n 's/finally wfid is : //p' <filename>
  • Эта команда распечатает только строки, которые содержат строку finally wfid is :, но этим заменят с пустой строкой.
7
ответ дан 23 November 2019 в 11:35

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

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

Отправленные ответы делают первую прекрасную часть, но не заканчивают задание. По моему скромному мнению, ответ muru является лучшим; я буду основываться на этом:

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

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

1
ответ дан 23 November 2019 в 11:35

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

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