Я пытаюсь написать сценарий оболочки, который должен будет преобразовать ввод следующей формы:
foo/bar/baz/qux.txt
bar/baz/quz.txt
baz/quz/foo.txt
В
baz-qux
quz
foo
т.е. разделить на '/', отбросить первые 2 сегмента, отбросить '.txt' и заменить оставшиеся слэши дефисами.
Замена кажется достаточно простой, используя tr:
paths=$(cat <<- EOF
foo/bar/baz/qux.txt
bar/baz/quz.txt
baz/quz/foo.txt
EOF
)
echo $paths | tr '/' '-' | tr '.txt' ' '
Я пробовал различные формы
cut -d '/' -f x
Чтобы получить необходимые сегменты, но у меня короткая позиция.
Я - рубиновый парень, так искушенный дотянуться до моего молотка и просто использовать рубин:
lines.each { |s| s.split('/')[2..-1].join('-').split('.')[0] }
Но развертывание ruby для этой операции может показаться излишним. И я все равно хотел бы улучшить свои навыки работы с оболочкой, поэтому мне было интересно, есть ли более изящный способ, который кто-нибудь посоветует сделать в оболочке?
Спасибо за любую помощь