Sed Comando diferença de comportamento wrt argumento de comportamento

5

Recentemente, estava trabalhando na execução de uma operação sed em um arquivo de configuração. Descobri que o comando sed está se comportando de maneira diferente com o parâmetro -ir vs -ri : -

[root@node system]# sed -ri 's|(^[[:space:]]+[Kk]ernel.*$)| transparent_hugepage=never|' temp_file
[root@node system]# echo $?
0

[root@node system]# sed -ir 's|(^[[:space:]]+[Kk]ernel.*$)| transparent_hugepage=never|' temp_file
sed: -e expression #1, char 60: invalid reference  on 's' command's RHS
[root@node system]# echo $?
1
    
por ananTgarg 09.08.2017 / 12:51

1 resposta

11

A opção -i para sed recebe um argumento de opção, um sufixo de nome de arquivo a ser usado para o arquivo de backup ao editar o arquivo de entrada no local. Com o GNU sed , este argumento da opção é opcional, mas será obviamente usado se fornecido.

Usando -ir informa sed que o nome do arquivo de backup deve ter o nome original do arquivo de entrada com o sufixo " r ". Como -r agora não é usado, a referência de retorno na parte de substituição da expressão não é mais reconhecida como válida, pois não há \( ... \) group no padrão (que é como você captura uma parte de um padrão com uma expressão regular básica).

Em conclusão, sed -ri não é o mesmo que sed -ir .

    
por 09.08.2017 / 12:57