grep /var/log /etc/rsyslog.conf | awk '{print $2}' | sed 's/^-//'
sed
procurará o início de uma linha s/^
seguida por um hífen -
e substituirá-a por uma string vazia //
.
grep /var/log /etc/rsyslog.conf | awk '{print $2}'
Saída:
/var/log/messages
/var/log/secure
-/var/log/maillog
/var/log/cron
-/var/log/spooler
/var/log/boot.log
Eu quero que o resultado seja:
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log
Por favor ajude a remover o -
.
Solução fácil
Você marcou sua pergunta como linux, então presumo que esteja usando o GNU grep. Em seguida, seria mais fácil apenas modificar sua chamada grep
para gerar apenas o texto desejado:
grep -o '/var/log/.*' /etc/rsyslog.conf
A opção -o
resulta em grep
imprimindo apenas a parte correspondente, não a linha inteira. Para isso, adicionei o /.*
ao padrão. Isso funciona, pois o caminho é o último componente da linha.
Modificações
Se houvesse algo seguindo o caminho que você não quer imprimir, o regexp e a chamada grep
pareceriam um pouco diferentes:
egrep -o '/var/log/\S*' /etc/rsyslog.conf
Isso inclui qualquer seqüência de caracteres que não sejam espaços em branco ( \S
) após o /var/log/
. Como \S
pertence a expressões regulares estendidas, a chamada foi alterada para egrep
em vez de grep
. (Você também pode usar grep -E
para isso.)
Se você também quiser classificar a lista resultante, e provavelmente eliminar duplicatas, o resultado poderá ser canalizado para sort
:
egrep -o '/var/log/\S*' /etc/rsyslog.conf | sort -u
O -u
significa "exclusivo", por isso as duplicatas são removidas.
Uma maneira fácil é expandir o comando para remover o caractere -
hífen:
grep /var/log /etc/rsyslog.conf | awk '{print $2}' | sed 's/^-//g'
grep /var/log /etc/rsyslog.conf | awk '{print $2}' | tr -d '-'
Ou usando awk
:
grep /var/log /etc/rsyslog.conf | awk '{sub("-","",$2);print $2}'
Você pode remover o traço principal -
do campo 2 usando a função sub()
de awk
:
grep /var/log /etc/rsyslog.conf | awk '{ sub(/^-/, "", $2); print $2 }'
Se você precisar remover os traços todos do começo do campo 2:
grep /var/log /etc/rsyslog.conf | awk '{ sub(/^-*/, "", $2); print $2 }'
Ou elimine grep
e pesquise o padrão com awk
:
awk '/\/var\/log/ { sub(/^-*/, "", $2); print $2 }' /etc/rsyslog.conf