2016-08-21 5 views
1

私はこれに似たURLをたくさん持っています。シェルを使用してファイル拡張子の前に4文字を削除する方法

私は交換する sedを使用してみましたが、正確なため、パターンを見つけることができませんでしたしました .png出力は

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

のようなものでなければなりません前に4文字のストリップをしたい

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

<random_tex>/original/Optimizec9cd.png?1413334050 

私が試した.png

sed前4つの文字は次のとおりです。sed 's/\(.{0,3}\.\)png/\1png/'

答えて

1

あなたは、POSIX-LYを行うことができます。

sed 's/.\{4\}\(\.png\)/\1/' 
  • .\{4\}試合4つの文字を.png前に、ちょうど使用.png

なお、交換には、複数のため.pngのパターンを、最初の1になります変更されました。

例:

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

あなただけのbashシェルのパラメータ展開を使用することができます

$ 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

... "ファイルは" すべてのあなたのURLを1行に1つずつ含まれている場合またはgawk/awkソリューション:

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

よかったですが、空白行add!/^$ /なんか見逃しました。 –

+0

シェルスクリプトは非常に遅く、さまざまな入力ファイルの内容を考えると失敗します。 [なぜシェルを使ってループを処理するかをテキストで判断する](http://unix.stackexchange.com/questions/169716/whyis-using-a-shell)を参照してください。 -loop-to-process-text-consider-bad-practice)やgoogle UUOC、シェル変数の引用、globbingなどがあります。 awkコマンドははるかに優れていて、入力の前に 'png'が早く現れなければ失敗しませんが、単純に' awk '{sub(/。{4} \ .png /、 "png")} 1 'ファイル'。 –

関連する問題