+ Responder ao Tópico



  1. #1

    Padrão Shell Script: como trocar um trecho de uma string dentro de uma variavel?

    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?

  2. #2

    Padrão Re: Shell Script: como trocar um trecho de uma string dentro de uma variavel?

    man tr



  3. #3

    Padrão Re: Shell Script: como trocar um trecho de uma string dentro de uma variavel?

    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.

  4. #4
    d294683
    Visitante

    Padrão Re: Shell Script: como trocar um trecho de uma string dentro de uma variavel?


    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.



  5. #5
    d294683
    Visitante

    Padrão Re: Shell Script: como trocar um trecho de uma string dentro de uma variavel?


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

  6. #6
    d294683
    Visitante

    Padrão Re: Shell Script: como trocar um trecho de uma string dentro de uma variavel?


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