以下の例では、パターンが区切られており、-
長さは3です。私の質問は:これを行うより効率的な方法はありますか?
$ echo $foo
./abcd-123-efghij-45678.pdf
$ echo "$foo" | sed -E 's:([^-\.\/]{3})([^-]*):\1:g'| sed "s/$/.${foo##*.}/"
./abc-123-efg-456.pdf
$ foo=${foo%.pdf}.djvu
$ echo $foo
./abcd-123-efghij-45678.djvu
$ echo "$foo" | sed -E 's:([^-\.\/]{3})([^-]*):\1:g'| sed "s/$/.${foo##*.}/"
./abc-123-efg-456.djvu
...
最終的にこのコマンドが必要なのは、内部で交換することです。for f in $(find . -name pattern); do mv $f $(...);done
ベストアンサー1
に短縮してください
echo ./abcd-123-efghij-45678.pdf | sed -E 's:([^-\.\/]{3})([^-]*):\1:g; s/$/.djvu/'
しかし、それ以外にはあなたができる最善の方法がありますsed
。