используя sed или grep для извлечения слова - PullRequest
1 голос
/ 26 июня 2019

Я получаю только пробел, когда пытаюсь извлечь идентификатор по коду:

grep "latest" sometextfile | sed 's/.*latest\([\s*]*\).*/\1/'
REPO                                              SAL                  ID            CREATED             SIZE
asdasfdg.dshgs.asd:54000/my-thing                       latest   c5521d9803e7        asdfa days ago          asdfafd.ad

Код:

grep "latest" sometextfile | sed 's/.*latest\([\s*]*\).*/\1/'

Выходом из команды выше должен быть ID: c5521d9803e7.

Чего не хватает в приведенной выше команде sed?

1 Ответ

1 голос
/ 26 июня 2019

Возможно, простое awk может работать:

awk '/latest/{ print $3 }' file

См. это онлайн awk демо . Он находит строку с latest и печатает содержимое поля 3.

Однако, следуя исходной логике, вы можете использовать только sed для извлечения этого фрагмента строки после latest:

sed -n '/[[:space:]]latest[[:space:]]/s/.*latest[[:space:]]*\([^[:space:]]*\).*/\1/p' file

См. онлайн демо

Детали

  • /[[:space:]]latest[[:space:]]/ - находит строку с пробелами + latest + пробел
  • s/.*latest[[:space:]]*\([^[:space:]]*\).*/\1/p - находит и заменяет содержимое группы 1:
    • .*latest - любые 0+ символов до последнего вхождения latest
    • [[:space:]]* - 0 или более пробелов
    • \([^[:space:]]*\) - Группа 1: любые 0 или более непробельных символов
    • .* - любые 0+ символов до конца строки

Опция -n подавляет вывод строки, а p показывает только результат замещения.

...