Ola,
Supondo que eu tenho um variavel, por exemplo:
str=abc.def.ghi
Por exemplo, eu preciso trocar o . por , ... ou trocar abc por xyz.
Como eu faco isso?
Ola,
Supondo que eu tenho um variavel, por exemplo:
str=abc.def.ghi
Por exemplo, eu preciso trocar o . por , ... ou trocar abc por xyz.
Como eu faco isso?
man tr
Obrigado pela dica.
So tem uma coisa que nao consegui fazer: supondo que preciso trocar o "." por "_" em todos os nomes de arquivos de um diretorio, mas nao posso trocar o "." da extensao.
Digamos que tenha um arquivo com este nome:
"abc.xyz.txt"
e gostaria de trocar para:
"abc_xyz.txt"
Eu tentei fazer algo do tipo:
ls -1 *.txt > lixo
# a linha abaixo foi feita para trocar . por Q, para que depois volte atras a extensao
cat lixo | tr ".txt" "Qtxt" > lixo2
# a linha abaixo foi feita para trocar todos os . por _
cat lixo2 | tr "." "_" > lixo3
# esta linha voltaria a extensao
cat lixo3 | tr "Qtxt" ".txt" > lixo4
entao eu usaria o lixo4 para fazer os "mv"s.
Contudo, quando faco o 1o. tr, ele troca TODOS os . por Q. Como eu faco para ele entender que quero trocar EXATAMENTE a string .txt por Qtxt? Olhei no "man tr" e no "info tr" e nao achei um jeito de fazer troca exata de strings.
em um diretorio assim:
drwxr-xr-x 2 root root 4096 Aug 21 14:30 .
drwxr-xr-x 17 root root 4096 Aug 21 14:21 ..
-rw-r--r-- 1 root root 743 Aug 21 14:29 12.34.56.78.90.txt
-rw-r--r-- 1 root root 660 Aug 21 14:29 123.456.789.txt
-rw-r--r-- 1 root root 504 Aug 21 14:23 abc.123.txt
-rw-r--r-- 1 root root 580 Aug 21 14:23 abc.456.txt
-rw-r--r-- 1 root root 428 Aug 21 14:22 abc.efg.txt
-rw-r--r-- 1 root root 6 Aug 21 14:21 a.txt
-rw-r--r-- 1 root root 12 Aug 21 14:21 b.txt
-rw-r--r-- 1 root root 18 Aug 21 14:21 c.txt
uma maneira seria esta:
ls | sed s/[.]txt$/---/ | sed s/[.]/_/g | sed s/---/.txt/
vc poderia filtrar/substit assim ... por exemplo ... explore mais o SED, para trocar,remover ou inserir, manipulando string ...
Boa sorte.
... desculpe ... continuando ...
a saída seria esta:
12_34_56_78_90.txt
123_456_789.txt
abc_123.txt
abc_456.txt
abc_efg.txt
a.txt
b.txt
c.txt
... se for com uma varíavel, ao invés de uma saída via pipe:
export linha="12.34.56.78.90.txt"
echo $linha | sed s/[.]txt$/---/ | sed s/[.]/_/g | sed s/---/.txt/