Erro ao combinar o fim da linha com o comando $ in Sed

0

No momento, estou aplicando o comando abaixo em csh por meio de um script de shell.

sed -i "s/cb $i$/cb $i $cb/" */callback_events

Onde:

  • $i - Valor da variável i
  • $cb - Valor da variável cb
  • $ - Para combinar o fim da linha

No entanto, estou recebendo o seguinte erro com o comando acima.

Variable name must contain alphanumeric characters.

Meu shell atual é /bin/csh .

    
por Karan Shah 12.12.2016 / 11:35

1 resposta

3

Você deve citar o caractere $ quando ele for para si mesmo dentro de uma string em doublequotes; caso contrário, o shell pensará que ele introduz uma expansão de variável e ficará infeliz se o caractere após ele não for alfabético ou uma das variáveis especiais.

sed -i "s/cb $i\$/cb $i $cb/" */callback_events

Existem dois níveis de interpretação de caracteres aqui.

  1. Primeiro, o shell lê o comando e aplica suas regras. Uma das regras é que dentro de doublequotes $ introduz expansão de variáveis, a menos que seja citada.

  2. Depois que o shell terminar, o comando ficará assim:

    sed -i s/cd <value-of-i>$/cd <value-of-i> <value-of-cb/ dir1/callback_events dir2/callback_events...
    

    Observe que as aspas desapareceram, $i e $cb foram substituídas por seus valores e \$ se tornou apenas $ . Também */callback_events foi substituído por uma lista de arquivos.

  3. Isso é passado para sed , que aplica as regras its . Uma dessas regras é que $ no final do padrão de pesquisa significa fim de linha.

por AlexP 12.12.2016 / 12:03