数字を含むすべてのテキストを置き換えてその数字を削除する便利なコマンドはありますか?
前任者:
myimages-202x250.jpg
width="202" heignt="250"
次に交換
myimages.jpg
width="217" height="317"
sedを試しましたが、うまくいきません
sed -i 's/*-*x*.jpg/.jpg/g' myfile.sql
答え1
@Costasが指摘したように、globbingモードを使用してsed
BREを使用しています。一般的な表現(sed
のオプションが使用されている場合は-r
ERE)。
コマンドは次のようにする必要があります。
sed -i -r 's/-[0-9]+x[0-9]+\.jpg/.jpg/g' myfile.sql
説明する:
[0-9]
「すべての数字」(0、1、2、3、4、5、6、7、8、9)を意味します。+
「1つ以上の以前の原子」を意味します(EREでのみ特別な意味を持つため、-r
スイッチが必要です)。+
したがって、パターンは-[0-9]+x[0-9]+\.jpg
次のことを意味します。 「リテラル、-
1つ以上の数字、リテラルx
、1つ以上の数字、リテラル.
(REではバックスラッシュが特殊文字なので重要です.
)、その後のテキストjpg
。
編集する:
明確に説明すると、次のように目的のタスクが実行されます。
sed -i -r -e 's/-[0-9]+x[0-9]+\.jpg/.jpg/g' -e 's/width="[0-9]+" *height="[0-9]+"/width="217" height="317"/' myfile.sql
追加されたパターンはwidth="[0-9]+" *height="[0-9]+"
上記と同じ原理に基づいており、ハードコードされた文字列に置き換えられますwidth="217" height="317"
。