Как использовать «sed», чтобы получить часть строки? - PullRequest
0 голосов
/ 14 декабря 2018

Фон

У меня есть файл с информацией о моем приложении.Мне нужно получить имя приложения из этого файла с помощью утилиты sed.

Цель

У меня есть файл со следующими строками:

app: :my_super_app,
version: "1.4.2",

Использование grep и cat Мне удалось зайти так далеко:

cat my_file | grep app: | sed -e 's/.*app: "\(:\)",/\1/'

Что (ошибочно) возвращает:

app: :my_super_app

Я хочу, чтобы он возвращал именноstring my_super_app

Задача

Моя команда sed буквально ничего не делает.Прямо сейчас я мог бы удалить это, и команда была бы той же самой.

Что я делаю не так?

Проведенное мной исследование:

Я проверил несколько похожих вопросов:

Но безрезультатно ...

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Не могли бы вы попробовать выполнить один раз.

sed -n '/^app:/s/\(.*:\)\([^,]*\),/\2/p'  Input_file

Вывод будет следующим:

my_super_app

РЕДАКТИРОВАТЬ: Если вы согласны с awk, попробуйте выполнить следующее.

awk -F'[:,]' '/^app:/{print $3}'  Input_file

PS: Усовершенствования в вашей команде sed будут следующими: НЕТ необходимости использовать cat и grep, поскольку sed может самостоятельно считывать Input_file.

0 голосов
/ 14 декабря 2018

для печати ТОЛЬКО название приложения

sed -e '/.*app: :\(.*\),.*/!d' -e 's//\1/' my_file
# or
sed -n 's/.*app: :\(.*\),.*/\1/p' my_file
0 голосов
/ 14 декабря 2018

Ваша команда sed ничего не делает, потому что она не совпадает.Например, в вашей строке нет кавычек.

Попробуйте это так:

sed -e 's/.*app: :\(.*\),/\1/'

У меня работает :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...