bash sed regex取代没有找到结果

时间:2014-10-28 00:46:47

标签: regex 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替换FIRST .jpg并使用以下sed:

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

我已经验证了regexp的工作原理: http://regex101.com/r/cU9xV2/1

3 个答案:

答案 0 :(得分: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 :(得分:1)

稍微修改一下语法:

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

诀窍是让第二个jpg字符串包含在等式中,这样贪婪的sed就不会与整行相匹配。

答案 2 :(得分:1)

您可以考虑以下使用否定字符类的正则表达式。

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

Ideone Demo