Как прочитать вывод sed в переменную - PullRequest
38 голосов
/ 25 октября 2010

У меня есть переменная, имеющая значение "abcd.txt".

Я хочу сохранить все до ".txt" во второй переменной, заменив ".txt" на ".log"

Iнет проблем с отображением нужного значения:

a="abcd.txt"

echo $a | sed 's/.txt/.log/'

Но как мне получить значение "abcd.log" во второй переменной?

Ответы [ 4 ]

66 голосов
/ 25 октября 2010

Вы можете использовать подстановку команд как:

new_filename=$(echo "$a" | sed 's/.txt/.log/')

или менее рекомендуемый обратный способ:

new_filename=`echo "$a" | sed 's/.txt/.log/'`
14 голосов
/ 25 октября 2010

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

logfile=`echo $a | sed 's/.txt/.log/'`

Это предполагает, что вы используете Bash.

В качестве альтернативы, для этой конкретной проблемы в Bash есть шаблонсама совпадающая конструкция:

stem=$(textfile%%.txt)
logfile=$(stem).log

или

logfile=$(textfile/%.txt/.log)

% в последнем примере обеспечит замену только последнего .txt.

3 голосов
/ 15 июня 2018

Самый простой способ:

logfile="${a/\.txt/\.log}"

Если нужно разрешить, чтобы имя файла в $a содержало более одного вхождения .txt, используйте следующее решение.Это более безопасно.Изменяет только последнее вхождение .txt

logfile="${a%%\.txt}.log"
3 голосов
/ 25 октября 2010

если у вас Bash / ksh

$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...