【发布时间】:2019-06-02 09:01:03
【问题描述】:
我正在尝试编写一个需要转换以下形式的输入的 shell 脚本:
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 似乎有点矫枉过正。而且我还是想提高我的 shell 技能,所以想知道是否有更优雅的方式有人会推荐在 shell 中执行此操作?
感谢您的帮助
【问题讨论】:
-
命令
tr '.txt' ' 'not 做你想做的事——它不会删除“.txt”,它将它转换为 4 个空格,它也可以与任何其他“t”、“x”和“.”相同。在名字里。例如,“test1.txt”->“es 1”。