ファイル名の部分文字列をトリミングします。各部分文字列は、指定された長さのパターンと一致します。

ファイル名の部分文字列をトリミングします。各部分文字列は、指定された長さのパターンと一致します。

以下の例では、パターンが区切られており、-長さは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

おすすめ記事