Como remover um primeiro caractere dessas sentenças específicas de uma lista de saída [duplicada]

0
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 - .

    
por cybersony 14.12.2015 / 11:17

4 respostas

0
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 // .

    
por 14.12.2015 / 11:28
0

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.

    
por 14.12.2015 / 11:35
0

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}'
    
por 14.12.2015 / 11:23
0

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
    
por 14.12.2015 / 11:52