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