替换文件中的文本

替换文件中的文本

是否有任何有用的命令来替换所有包含数字的文本并删除这些数字。
前任:

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's -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)
  • +表示“一个或多个前一个原子”(-r需要开关,因为 +仅在 ERE 中具有特殊含义)

因此,该模式的-[0-9]+x[0-9]+\.jpg意思是:“一个文字,-后跟一个或多个数字,后跟一个文字x,后跟一个或多个数字,后跟一个文字.(反斜杠很重要,因为.它是 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"

相关内容