sed замена текста в файле [дубликат]

Esa línea de comando ejecutaría get_env '\1'en una sustitución de comando y pegaría su salida en la línea de comando de sed. Probablemente debería obtener un error al respecto, ya que \1no es un nombre válido para una variable.

Podrías usar Perl y s/\{\?([a-z]+)\}/$ENV{$1}/para hacer eso; %ENVes un hash que contiene las variables de entorno:

$ export name=you
$ echo "hello {?name}" | perl -pe 's/\{\?([a-z]+)\}/$ENV{$1}/'
hello you

(GNU sed tiene el comando epara ejecutar programas externos, pero utiliza todo el espacio de patrones, no solo la parte coincidente, por lo que no parece encajar muy bien aquí.)


Puramente en Bash, si insistes(setvar.sh):

#!/bin/bash
while IFS= read -r line ; do
        while [[ $line =~ ^(.*)(\{\?[a-zA-Z0-9_]+\})(.*)$ ]] ; do
                varname=${BASH_REMATCH[2]}
                varname=${varname#"{?"}
                varname=${varname%\}}
                printf -v line "%s%s%s" "${BASH_REMATCH[1]}" "${!varname}" "${BASH_REMATCH[3]}"
        done
        printf "%s\n" "$line" 
done < "${1-/dev/stdin}"

$ echo 'foo {?BASH_VERSION} {?blah} bar' |blah=ABC bash setvar.sh
foo 4.4.12(1)-release ABC bar
66
09.09.2018, 13:23
0 ответов

Теги

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