/ / Substitua a string no script bash (MacOS) - macos, bash, sed

Substituir string no script bash (MacOS) - macos, bash, sed

Eu tenho o seguinte código gerado em um Makefile:

    ${SED} -i "" -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
#   ${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)

Com o qual quero substituir

#   ${SED} -i "" -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)

Portanto, é simplesmente uma questão de comentar uma linha e substituir pela outra.

Mas, devido às aspas simples e duplas, não consigo.

Se algum especialista em regex estiver disposto a levar 1-2 minutos para me ajudar isso será ótimo.

Eu estou puxando meus cabelos aqui.

obrigado

Respostas:

1 para resposta № 1
# Comment out 1st line.
sed -E "s`([[:space:]]*${SED} -i """""" -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles))`#1`" Makefile
# Uncomment 2nd line.
sed -E "s`#([[:space:]]+${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles))`1`" Makefile

o sed Os comandos estão em strings de aspas simples, que geralmente são mais fáceis de usar (você não precisa se preocupar com o shell expandindo sua string).

O aspecto complicado do primeiro comando é queaspas simples não podem ser incluídas em uma cadeia de caracteres entre aspas simples (nem mesmo escapar é uma opção); portanto, o comando é simplesmente dividido em duas cadeias de aspas simples com """" - totalizando "" - emendado.

O outro aspecto complicado é obter o escape de todos os caracteres especiais de regex. direita.