2017-09-30 6 views
1

私はepub形式の電子ブックを持つフォルダを持ち、その名前は "title_of_the_book _-_ name_of_the_author"という形になっています。私は電子ブックの名前の2つの部分を交換して、 "name_of_the_author-title_of_the_book"になる必要があります。私はほとんどすべての状況で動作するこのコマンドを書いた:文字列内の特定の部分文字列をsedと一致させる

ls *.epub | sed 's/^\([^-]*\)-_\([^.]*\)/\2-\1/' | sed -E 's/.(.epub)$/\1/g' 

私はコードを説明するつもりです。最初に、フォルダ内のすべてのepubファイルを一覧表示してから、ブックのタイトルとブックの著者とを一致させてスワップし、最終的にブックのタイトルの最後にある_を削除します。 これはほぼすべての状況で機能しますが、書籍のタイトルには - が含まれていると、これは機能しません。この文字の代わりに部分文字列_-をどのように一致させることができますか?私はそれが私の問題を解決するだろうと思う。

答えて

1

私が正しくあなたの問題/質問を理解していれば、このsed表現はトリックを行う必要があります。

sed -E 's/^(.*)_-_(.*)\.epub$/\2-\1.epub/' 

これは、すべてのタイトルが固定3文字で著者から分離されているという仮定の下で動作しますが文字列_-_。我々は欲張りのキャプチャグループ(.*)を使用しますが、パターンの始めと終わりを固定しているので、タイトルを取得して正しく作成します。例えば

$ echo "title_of_the_book_-_name_of_the_author.epub" | sed -E 's/^(.*)_-_(.*)\.epub/\2-\1.epub$/' 
name_of_the_author-title_of_the_book.epub 
$ echo "semi-title_of_the_book_-_name_of_the_author.epub" | sed -E 's/^(.*)_-_(.*)\.epub/\2-\1.epub$/' 
name_of_the_author-semi-title_of_the_book.epub 
関連する問題