如何使用shell删除文件扩展名前的4个字符

时间:2016-08-21 05:42:07

标签: bash shell replace sed character

我有很多类似的Urls。

<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进行替换,但在.png之前无法找到4个字符的模式

sed我试过的是:sed 's/\(.{0,3}\.\)png/\1png/'

2 个答案:

答案 0 :(得分:1)

你可以这样做,POSIX-ly:

sed 's/.\{4\}\(\.png\)/\1/'
  • .\{4\}匹配.png之前的4个字符,在替换中使用.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

答案 1 :(得分:-1)

if&#34; file&#34;包含您的所有网址,每行一个...

您只能使用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