No sed, como posso criar uma string de substituição usando uma função bash , especialmente uma função de uma ou mais das partes encontradas, normalmente identificadas como \1, \2, ...?
Em outras palavras, eu quero fazer algo assim:
sed -e 's/\(.*\)/<bash_function \1>/'
Nota: Este Q é semelhante a Como incorporar um comando shell em uma expressão sed? , mas em vez de chamar um comando GNU/Linux, quero simplesmente chamar uma função bash local.
Você pode fazer isso com GNU sed, usando o
e
sinalizador:sob as seguintes restrições:
Todo o 'espaço de padrão' resultante (ou seja, toda a string de entrada após ter sido pesquisada e substituída) é executado, ou seja, não apenas o que está entre as duas barras finais. Isso é o que você mostra no seu exemplo, mas pode não ser o que você realmente quer fazer.
o seu sistema
/bin/sh
ébash
você exportou a função, conforme descrito aqui Posso “exportar” funções no bash?
Então, por exemplo, no meu sistema (onde
/bin/sh
está odash
shell por padrão), as etapas sãoentão eu posso fazer
Aqui está outro exemplo para esclarecer ainda mais que toda a string de entrada após a execução da pesquisa e substituição é executada:
Se você não puder fazer com
/bin/sh
que sejabash
, provavelmente o mais próximo que você poderá obter é colocar a definição da função em um arquivo e originá-la primeiro:mas dado
então