Ответ 1
Вы можете использовать замену команд как:
new_filename=$(echo "$a" | sed 's/.txt/.log/')
или менее рекомендуемый обратный путь:
new_filename=`echo "$a" | sed 's/.txt/.log/'`
У меня есть переменная, которая имеет значение "abcd.txt"
.
Я хочу сохранить все до ".txt"
во второй переменной, заменив ".txt"
на ".log"
У меня нет проблем с эхом требуемого значения:
a="abcd.txt"
echo $a | sed 's/.txt/.log/'
Но как мне получить значение "abcd.log"
во вторую переменную?
Вы можете использовать замену команд как:
new_filename=$(echo "$a" | sed 's/.txt/.log/')
или менее рекомендуемый обратный путь:
new_filename=`echo "$a" | sed 's/.txt/.log/'`
Вы можете использовать backticks для назначения вывода команды переменной:
logfile=`echo $a | sed 's/.txt/.log/'`
Предположим, вы используете Bash.
В качестве альтернативы, для этой конкретной проблемы Bash существуют сами конструкции построения шаблонов:
stem=$(textfile%%.txt)
logfile=$(stem).log
или
logfile=$(textfile/%.txt/.log)
В последнем примере% будет гарантировать замену только последнего .txt.
если у вас есть Bash/ksh
$ var="abcd.txt"
$ echo ${var%.txt}.log
abcd.log
$ variable=${var%.txt}.log
Самый простой способ -
logfile="${a/\.txt/\.log}"
Если допустимо, что имя файла в $a
имеет более одного вхождения .txt
в нем, используйте следующее решение. Это более безопасно. Это только изменяет последнее вхождение .txt
logfile="${a%%\.txt}.log"