Shell: echo Многосимвольная строка

Допустим, у меня есть такие строки:

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

и я хочу создать цикл для эха

my_first_text
my_second_text

После некоторых исследований я обнаружил, что команда cut не в состоянии сделать это. Я думаю, что awk может быть вариантом, но я не до конца понимал, как заставить его работать должным образом в этом примере ... поэтому любая помощь будет очень признательна.

1
задан 24 January 2014 в 19:58

3 ответа

Я думаю, что самый простой способ - использовать строковые операторы . Например, если:

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

, то вы можете использовать что-то вроде:

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

Но вы все равно можете использовать cut с помощью rev (см. man cut и man rev для получения дополнительной информации):

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

И решение с использованием awk:

echo $str | awk -F/ '{print $NF}' | awk -F. '{$NF=""}1'
0
ответ дан 24 January 2014 в 19:58

Чтобы избежать использования каких-либо внешних программ, таких как cut или awk, вы можете сортировать или объединять операторы строки bash, например если str="/somefolder/andsubfolder", то

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

сначала удаляет начальный компонент пути (сопоставление самого длинного префикса */), затем удаляет суффикс .txt (сопоставление самого короткого суффикса *.txt)

. можно также сделать

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

, чтобы удалить любой суффикс .* вместо просто .txt

0
ответ дан 24 January 2014 в 19:58

Попробуйте этот сценарий оболочки

#!/bin/bash

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

, это наверняка поможет вам.

0
ответ дан 24 January 2014 в 19:58

Другие вопросы по тегам:

Похожие вопросы: