Usando o comando sed no Unix

2

como você pega uma palavra de um arquivo e muda para um caminho absoluto? Basicamente eu preciso pegar uma palavra de um arquivo unix e alterá-la para um caminho de diretório absoluto nesse arquivo. O nome do arquivo é httpd.conf. O caminho para esse arquivo é /home/Tina/apache/conf/httpd.conf. A linha é ServerRoot "/ usr". O "/ usr" é o que eu preciso mudar para / home / Tina / apache.

Tina@Irv-PC ~/apache/conf
$ cat httpd.conf
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.

# Do not add a slash at the end of the directory path.
#
ServerRoot "/usr"

#
# DocumentRoot: The directory out of which you will serve your documents.
#
DocumentRoot "/Library/WebServer/Documents"
    
por Tina 17.03.2015 / 18:15

2 respostas

2

Tente isto:

$ sed -i.orig '/ServerRoot/s_"/usr"_/home/Tina/apache_' /home/Tina/apache/conf/httpd.conf

Se você quiser colocar aspas duplas em torno de /home/Tina/apache :

$ sed -i.orig '/ServerRoot/s_"/usr"_"/home/Tina/apache"_' /home/Tina/apache/conf/httpd.conf

Aqui primeiro combinamos se a linha contiver "ServerRoot" ( /ServerRoot/ ), se sim, fizemos a substituição necessária ( s_"/usr"_"/home/Tina/apache"_ ). Como você tem / no caminho, usamos _ como os delimitadores de substituição sed . O arquivo modificado será /home/Tina/apache/conf/httpd.conf e o arquivo original será mantido como /home/Tina/apache/conf/httpd.conf.orig .

    
por 17.03.2015 / 18:56
1

Para evitar efeitos colaterais, substituo toda a linha:

sed -i.bak -e 's#^ *ServerRoot  *"/usr" *$#ServerRoot "/home/Tina/apache"#' httpd.conf

Costuma-se usar 's / from / to /', mas como você tem barras em todos os lugares, é aconselhável usar outro caractere para que você não precise escrever \/ para cada separador de caminho em sua expressão. Eu coloco ^...$ em torno de sua expressão de para certificar-se de combinar apenas as linhas que consistem exatamente nisso ( ^ é o início da linha, $ fim da linha)

A opção -i editará seu arquivo, mas fará um backup para httpd.conf.bak , o que é uma boa ideia ao editar arquivos de configuração do sistema.

Caso o seu sed não suporte os delimitadores alternativos, você pode tentar

sed -i.bak -e 's/^ *ServerRoot  *"\/usr" *$/ServerRoot "\/home\/Tina\/apache"/' httpd.conf
    
por 17.03.2015 / 18:55