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

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

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

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

my_first_text
my_second_text

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

1
задан 06.05.2020, 21:14

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'
2
ответ дан 06.05.2020, 21:16
  • 1
    @Joschi Сейчас я сею в Вашем вопросе что Вы didn' t хотят .txt в конце. Так, я просто отредактировал снова свой ответ. – Trilarion 06.05.2020, 21:16
  • 2
    @Joschi я обновил свой ответ. Если Вы хотите сократить .txt, можно использовать, например: echo ${str##*/} | awk -F. '{$NF=""}1' – Noer Cholis 06.05.2020, 21:17
  • 3
    потрясающий.спасибо. возвраты: my_first_text.txt... любой путь к дальнейшему сокращению " .txt"? и можно ли дать мне подсказку, как синтаксис для первого примера работает? – ransomweaver 06.05.2020, 21:17

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

#!/bin/bash

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

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

-1
ответ дан 06.05.2020, 21:15
  • 1
    Имейте Вас, протестировал Ваш " solution"? – loretoparisi 06.05.2020, 21:15
  • 2
    Провал, все еще-1... – Ignacio Vazquez-Abrams 06.05.2020, 21:15
  • 3
    привет сэр Radu RДѓdeanu скажите мне, что является моей ошибкой в моем обновленном сценарии.. если Вы говорите мне, что я могу улучшить свой будущий сценарий.. – anon58192932 06.05.2020, 21:16
  • 4
    хорошо.. но теперь я выполнил sh файл в своей системе. где состоит в том моя ошибка, если бы Вы сообщите мне, что это было бы очень любезно.. – petre 06.05.2020, 21:16
  • 5
    #!/bin/bash abc=/somefolder/andsubfolder/my_first_text.txt my_file= $ (повторяют $abc | awk-F/' {печатают 4$} ') повторяют " $my_file" извините я не протестировал так, я теперь исправляю его, выполните это – fatih_dur 06.05.2020, 21:17

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

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

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

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

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

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

2
ответ дан 06.05.2020, 21:15

Теги

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