2017-09-30 199 views
1

我有一個epub格式的電子書文件夾,它們的名字的形狀是「title_of_the_book _-_ name_of_the_author」。我必須交換電子書名稱的兩部分,以便它們變成「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 
相關問題