2014-10-28 45 views
1

我有一個看起來像行的文件:的bash sed的正則表達式替換沒有找到結果

mv -v DF-02239.jpg DF-02239.jpg 
mv -v DF-02240.jpg DF-02240.jpg 
mv -v DF-02241.jpg DF-02241.jpg 
mv -v DF-02242.jpg DF-02242.jpg 

我試圖取代.JPG第一jpg和現在用的是下面的sed:

sed 's/\(mv -v .*?\)\(\.jpg\)\(.*\)/\1.JPG \3/' finalDuplicates.txt > finalCaseDuplicates.txt 

我已經驗證了正則表達式在這裏工作: http://regex101.com/r/cU9xV2/1

+1

有沒有你不想簡單使用'sed's/jpg/JPG /''的原因?第一張JPG有下面的空間,第二張沒有,所以你可以充分利用那 – morgano 2014-10-28 00:55:29

+0

認真?!好的。讓我嘗試。這樣比較簡單。如果這不起作用......你看到我的正則表達式有什麼問題嗎?我會讓你張貼...一刻 – AshBrad 2014-10-28 00:57:23

+0

@morgano請發表回覆,我會信任你。 – AshBrad 2014-10-28 00:59:36

回答

2

您只需更換JPG至JPG,sed取代第一次出現只

sed 's/jpg/JPG/' file_name 

輸出

mv -v DF-02239.JPG DF-02239.jpg 
mv -v DF-02240.JPG DF-02240.jpg 
mv -v DF-02241.JPG DF-02241.jpg 
mv -v DF-02242.JPG DF-02242.jpg 
1

修改你的語法只是有點:

sed 's/\(mv -v .*\.\)jpg\(.*jpg\)/\1JPG\2/' 

訣竅是將第二個jpg字符串包含到等式中,這樣貪婪sed與整行不匹配。

1

您可以考慮使用否定字符類的以下正則表達式。

sed 's/^\(mv -v[^.]\+\.\)jpg/\1JPG/' 

Ideone Demo