
como deletar o segundo caractere "." da linha
o que eu tenho é isso (mas remova o primeiro "." da saída
uname -r | sed s'/\./ /'
2 6.18-164.2.1.el5PAE
enquanto eu preciso da seguinte saída
2.6 18-164.2.1.el5PAE
Responder1
Basta adicionar N ao final do comando para que corresponda à enésima correspondência, assim:
uname -r | sed 's/\./ /2'
Para que você precisa disso?
Da info
página em diante sed
:
O comando `s' pode ser seguido por zero ou mais dos seguintes FLAGS:
g
Apply the replacement to _all_ matches to the REGEXP, not just the first.
NÚMERO
Only replace the NUMBERth match of the REGEXP.
Responder2
Aqui estão algumas maneiras de remover o segundo .
de uma linha de um arquivo (elas afetarão todas as linhas do arquivo):
sed
. Vocêjá temqual é provavelmente a melhor maneira, mas aqui está outra:sed 's/\([^.]*\.[^.]*\)\./\1 /' file
Isso procurará o trecho mais longo de não-
.
([^.]*
), depois um.
(\.
), depois o próximo trecho de não-.
e finalmente um.
(\.
). Os parênteses capturam os padrões para que possamos nos referir a eles como\1
. Portanto, o comando acima irá apenas deletar o segundo.
e substituí-lo por um espaço.Se você possui GNU
sed
(padrão no Linux), pode simplificar para:sed -r 's/([^.]*\.[^.]*)\./\1 /' file
Perl
perl -pe 's/([^.]*\.[^.]*)\./\1 /' file
ou
perl -F'\.' -ane 'print "$F[0].$F[1] ", join ".", @F[2..$#F]' file
awk
(Tenho certeza que há uma maneira melhor)awk -F. '{printf "%s.%s ",$1,$2; for(i=3;i<NF;i++){printf "%s.",$(i); }print $NF}' file