Para menos informações sobre caracteres especiais, como aspas duplas ( e $
, se você usá-lo ), basta colocar a variável entre aspas duplas e o resto entre aspas simples. Não há espaços entre.
's|\("browser.startup.homepage",\) "\(.*\)"| '"$ddrs"' |'
Em uma nota separada, como você não se refere ao segundo valor, não há motivo para usar parênteses:
's|\("browser.startup.homepage",\) ".*"| '"$ddrs"' |'
Da mesma forma, se você quiser que o valor da variável $ddrs
apareça entre aspas duplas no arquivo que você está editando, será necessário incluir essas aspas duplas:
's|\("browser.startup.homepage",\) ".*"| "'"$ddrs"'" |'
Mas, me ocorre que você provavelmente tem mais de um valor em uma única linha (ou você poderia ter.) Como os regexes sed são gananciosos, seu .*
corresponderá ao restante da linha até a última citação last . Para torná-lo não-ganancioso (para este caso de uso específico), use uma classe de caractere que corresponda a qualquer coisa, exceto às aspas duplas:
's|\("browser.startup.homepage",\) "[^"]*"| "'"$ddrs"'" |'
E, embora uma coincidência acidental seja improvável, os pontos ( .
) na primeira seqüência não são pontos correspondentes, eles estão combinando a classe de caractere "qualquer caractere único". Para evitar que você escape deles:
's|\("browser\.startup\.homepage",\) "[^"]*"| "'"$ddrs"'" |'
Parece que você está usando um delimitador de vírgula, mas corresponde a um espaço APENAS após a vírgula - não dois espaços ou zero. Eu suspeito que qualquer número de espaços seja possível , então, para robustez, permita espaços arbitrários entre a vírgula e as aspas duplas:
's|\("browser\.startup\.homepage",\) *"[^"]*"| "'"$ddrs"'" |'
Não há outras questões óbvias aqui. (1) O espaço à esquerda que assumirei é deliberado; (2) Suponho que |
é um caractere bastante seguro para assumir que não estará na URL (o conteúdo de $ddrs
). O escape aqui é um pesadelo para ler, mas para este uso específico especificamente em sed
eu acho que é inevitável.
A robustez é mais importante do que a legibilidade, embora seja boa a legibilidade para se esforçar para não sacrificar a robustez.