Замена только определенных переменных на envsubst

Вы можете заменить последний блок на sed, используя маркер конца строки ($).

#/bin/bash
for file in *_* ; do
  #any alphanumeric string as suffix
  mv $file $( sed 's/_\([A-Za-z0-9]\{1,\}\)$/.\1/' <<< $file )
  #alternatively numbers only as in given input sample
  mv $file $( sed 's/_\([0-9]\{1,\}\)$/.\1/' <<< $file )
done

AFAIK \{1,\} бит как "один или более" из предыдущего списка - это GNU sed - но я не уверен на 100% в этом ограничении.

57
07.07.2016, 20:46
2 ответа

Перед вызовом envsubst вы должны использовать экспорт с использованием одинарных кавычек, чтобы вернуть измененный VAR_1 . Как в:

export VAR_1='somevalue'

Для получения дополнительных сведений см .:

Как заменить переменные оболочки в сложных текстовых файлах

1
27.01.2020, 19:32

Согласно странице руководства:

envsubst [OPTION] [SHELL-FORMAT]

Если задан SHELL-FORMAT, заменяются только те переменные среды, на которые ссылаются в SHELL-FORMAT; в противном случае все ссылки на переменные среды , встречающиеся в стандартном вводе, заменяются .

Где строки SHELL-FORMAT - это "строки со ссылками на переменные оболочки в форме $ variable или $ {variable} [...] Имена переменных должны состоять исключительно из буквенно-цифровых символов или символов подчеркивания ASCII, не начинаться с цифры и быть непустым; в противном случае такая ссылка на переменную игнорируется ». .
Итак, нужно передать имена соответствующих переменных в envsubst в строке формата оболочки (очевидно, их нужно экранировать / заключать в кавычки, чтобы передавать буквально в ] envsubst ). Пример:

входной файл, например infile :

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

и некоторые значения, такие как

export  VAR1="one" VAR2="two" VAR3="three"

, затем запуск

envsubst '${VAR1} ${VAR3}' <infile

,

envsubst '${VAR1},${VAR3}' <infile

или

envsubst '${VAR1}
${VAR3}' <infile

выводит

VAR1=one
VAR2=${VAR2}
VAR3=three

Или, если вы предпочитаете обратную косую черту:

envsubst \$VAR1,\$VAR2 <infile

производит

VAR1=one
VAR2=two
VAR3=${VAR3}
253
27.01.2020, 19:32

Теги

Похожие вопросы