2016-12-07 2 views
2

Я получил следующую строку: «/ передачи/IN/имя /test.txt»Bash - Сплит реж строка

Теперь я пытаюсь разделить это на имя строка , потому что мне нужно это для дальнейших операций.

Как я могу разбить это правильно?

Я попытался с сократить (будет СЭД быть лучше?), Но я не могу найти правильный подход.

Спасибо за вашу помощь заранее.

ответ

2

Это должно помочь тоже:

awk -F'/' '{print $(NF-1)}' <<<"https://stackoverflow.com/a/b/c/d" 

И это выводит:

c 

Если вам нравится с помощью СЭД:

sed 's#/[^/]*$##;s#.*/##' <<<"https://stackoverflow.com/a/b/c/d" 
+0

СЕПГ выражение DIT трюк. Много thanx – cr1zz

1

Просто используйте соответствующие инструменты dirname и basename прикованных вместе:

echo $(basename $(dirname /transfer/IN/name/test.txt)) 
  • dirname =>/transfer/IN/name
  • basename =>name

sed решение выглядит более сложным КСТАТИ:

sed -e "s#.*/\([^/]*\)/[^/]*#\1#" -e "s#/.*##" <<< name/test.txt 

(2 выражения для обработки полный относительный случай name/test.txt)

1

Вы можете использовать расширение параметров:

#!/bin/bash 

path=/transfer/IN/name/test.txt 
path1=${path%/*}   # Remove everything from the last /. 
path1=${path1##*/}   # Remove everything up to the last /. 
echo "$path1"