Bash; Как я могу получить все после "_foo" в строке текста из файла? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть файл properties.txt, который содержит информацию, необходимую для моего сценария bash.

Каждая строка в этом файле представляет собой отдельный фрагмент информации, и я предваряю каждую строку "_foo", чтобы помочь grep найти нужную информацию.

На данный момент я нашел, что могу использовать grep, чтобы найти строку с нужной мне информацией, например:

doge$ grep -n "_version " properties.txt

Это выводит:

1:_version 1.1.0-release

Как я могу удалить "_version" и сохранить только "1.1.0-release" в переменной?

предпочтительно решение будет использовать встроенные модули, найденные почти в каждой системе по умолчанию

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Расширение параметра

var='1:_version 1.1.0-release'; echo "${var##* }"

В вашем случае вы можете добавить Command Substitution $( ) для захвата / сохранения вывода команды и сохранить его в переменной.

var=$(grep --color=always -n "_version " properties.txt)

echo "${var##* }"

Хорошо, вы можете удалить цвет, но это также не должно повредить. Этот PE не ограничен bash, он должен работать на POSIX-совместимой оболочке.

1 голос
/ 21 февраля 2020

sed -n 's/_version //p' properties.txt

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

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

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