Uma possibilidade simples seria
echo >>file.conf
após sed
executar, não tenho certeza de que é possível com sed
Eu tenho um arquivo de texto: file.conf
### Option: LogFile
# Name of log file.
# If not set, syslog is used.
#
# Mandatory: no
# Default:
# LogFile=
### Option: LogFileSize
# Maximum size of log file in MB.
# 0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1
Eu quero procurar por uma linha contendo LogFile
, pular linhas não-brancas subseqüentes e inserir uma nova linha com conteúdo predefinido antes da próxima linha em branco.
E eu tentei:
sed --posix -e '/\bLogFile\b/{:a;n;/^ *$/!ba;i\LogFile=/tmp/log1.log' -e '}' file.conf
E isso está funcionando bem, para os blocos de opção que são seguidos por uma linha em branco. No entanto, também é possível que o arquivo seja finalizado sem linha em branco. Nesse caso, quero inserir a nova linha no final do arquivo. Neste exemplo, isso aconteceria se eu estivesse procurando LogFileSize
em vez de LogFile
.
Como posso lidar com este caso?
Uma possibilidade simples seria
echo >>file.conf
após sed
executar, não tenho certeza de que é possível com sed
Você está executando problemas inte porque está usando i
("insert") em vez de a
("append"). i
insere antes de uma linha selecionada enquanto a
acrescenta após.
Você também está correspondendo ao bloco pelo cabeçalho Option: LogFile
em vez da linha mais apropriadamente posicionada com o valor padrão ( # LogFile=
).
Usando o GNU sed
:
$ sed '/^# LogFile=/a\LogFile=/tmp/log1.log' file.conf
### Option: LogFile
# Name of log file.
# If not set, syslog is used.
#
# Mandatory: no
# Default:
# LogFile=
LogFile=/tmp/log1.log
### Option: LogFileSize
# Maximum size of log file in MB.
# 0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1
Isso também funciona com LogFileSize
:
$ sed '/^# LogFileSize=/a\LogFileSize=512' file.conf
### Option: LogFile
# Name of log file.
# If not set, syslog is used.
#
# Mandatory: no
# Default:
# LogFile=
### Option: LogFileSize
# Maximum size of log file in MB.
# 0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1
LogFileSize=512
Ambos de uma só vez:
$ sed -e '/^# LogFileSize=/a\LogFileSize=512' -e '/^# LogFile=/a\LogFile=/tmp/log1.log' file.conf
Tags text-processing sed