2016-08-21 66 views
1

我有很多與此類似的Url。如何在使用shell的文件擴展名之前刪除4個字符

<random_tex>/original/Widget-Examples-FAQ3dad.png?1437083013 

<random_tex>/original/Optimizec9cd.png?1413334050 

我想.png之前剝去4個字符的輸出應該像

<random_tex>/original/Widget-Examples-FAQ.png?1437083013 
<random_tex>/original/Optimize.png?1413334050 

我使用sed更換試過,但未能找到模式的確切4個字符之前.png

sed我已經試過是:sed 's/\(.{0,3}\.\)png/\1png/'

回答

1

你可以做,POSIX-LY:

sed 's/.\{4\}\(\.png\)/\1/' 
  • .\{4\}匹配4個字符.png之前,在剛剛使用.png

注意更換,多.png模式,第一個會改性。

例子:

$ sed 's/.\{4\}\(\.png\)/\1/' <<<'/original/Widget-Examples-FAQ3dad.png?1437083013' 
/original/Widget-Examples-FAQ.png?1437083013 

$ sed 's/.\{4\}\(\.png\)/\1/' <<<'/original/Optimizec9cd.png?1413334050' 
/original/Optimize.png?1413334050 
+0

謝謝!有效。 – sam

-1

如果 「文件」 包含所有網址,每行一個...

只能使用bash shell的參數擴展:

cat file | while read -r line 
do 
    echo ${line/????.png/.png} 
done 

或gawk/awk解決方案:

gawk '{ sub(/.{4}.png/,".png",$0); print $0 }' file 
+0

好,但你錯過了空白行添加!/^$ /或什麼的。 –

+0

shell腳本將非常慢,並給予各種輸入文件內容失敗 - 從來沒有這樣做。請參閱[爲什麼要使用shell循環處理文本被認爲是壞習慣](http://unix.stackexchange.com/questions/169716/why-is-using-a-shell -loop-to-process-text-considered-bad-practice)和谷歌UUOC,引用shell變量和globbing。 awk命令要好得多,除非在輸入的前面出現'png',否則它不會失敗,但它可以通過'awk'{sub(/。{4} \。png /,「。png」)} 1'文件'。 –

相關問題