Shell: echo Cadeia de caracteres múltiplos

1

Digamos que eu tenha strings como esta:

/somefolder/andsubfolder/my_first_text.txt
/somefolder/andsubfolder/my_second_text.txt

e eu quero criar um loop para ecoar

my_first_text
my_second_text

Após algumas pesquisas, descobri que o comando cut não tem capacidade para fazê-lo. Eu acho que awk pode ser uma opção, mas eu não entendi como fazê-lo funcionar corretamente neste exemplo ... então qualquer ajuda seria muito apreciada.

    
por Joschi 22.01.2014 / 14:36

3 respostas

2

Acho que a maneira mais simples é usar operadores de string . Por exemplo, se:

str="/somefolder/andsubfolder/my_first_text.txt"

então você pode usar algo assim:

str=${str##*/}
echo ${str%.txt}

Mas você ainda pode usar cut com a ajuda de rev (consulte man cut e man rev para obter mais informações):

echo $str | rev | cut -d/ -f1 | cut -d. -f 2- | rev

E a solução usando awk é:

echo $str | awk -F/ '{print $NF}' | awk -F. '{$NF=""}1'
    
por Radu Rădeanu 22.01.2014 / 14:55
2

Para evitar o uso de programas externos como o cut ou o awk, é possível concatenar os operadores de string bash, por exemplo. if str="/somefolder/andsubfolder" then

str="${str##*/}"; echo "${str%.txt}"

remove primeiro o componente do caminho principal (o prefixo mais longo que corresponde a */ ) e, em seguida, remove o sufixo .txt (o sufixo mais curto que corresponde a *.txt )

Você também pode fazer

str="${str##*/}"; echo "${str%.*}"

para remover um único sufixo .* em vez de apenas .txt

    
por steeldriver 22.01.2014 / 15:30
-1

teste este script de shell

#!/bin/bash

abc=/somefolder/andsubfolder/my_first_text.txt
my_file=$(echo $abc | awk -F/ '{print }')
echo "$my_file"

isso certamente ajudará você.

    
por smn_onrocks 24.01.2014 / 07:06