Regex 在Linux下替换文件中的自定义字符串

Regex 在Linux下替换文件中的自定义字符串,regex,linux,Regex,Linux,我故意把这个问题贴在这里,尽管对我来说,它与乳胶有关。但问题本身是一般性的 我有几个*.tex源文件,其中包含对图像的引用,例如image1.jpg和image2.png。我想在所有源文件中搜索一组指定的扩展名,在本例中是jpg和png,并用它们的pdf副本替换它们。因此,我想以参考image1.pdf和image2.pdf结束。使问题复杂化的是,我有一个20个文件的列表image3.jpg、Image4.png等等,我不想更改这些文件 有没有基于sed的简单解决方案或任何工具建议?哪个可能有用

我故意把这个问题贴在这里,尽管对我来说,它与乳胶有关。但问题本身是一般性的

我有几个*.tex源文件,其中包含对图像的引用,例如image1.jpg和image2.png。我想在所有源文件中搜索一组指定的扩展名,在本例中是jpg和png,并用它们的pdf副本替换它们。因此,我想以参考image1.pdf和image2.pdf结束。使问题复杂化的是,我有一个20个文件的列表image3.jpg、Image4.png等等,我不想更改这些文件

有没有基于sed的简单解决方案或任何工具建议?哪个可能有用?不过,我不是正则表达式大师

我建议使用find获取文件列表,使用grep-v对其进行过滤以删除不希望更改的文件,然后使用xargs在sed-r-I的/image[12]\.jpg | png/image\1.pdf/g'文件上运行。小心,sed-i执行就地替换,因此最好备份文件以防出现问题。您还可以使用sed-ibak让sed在修改文件之前使用bak扩展名进行备份。

我建议使用find获取文件列表,使用grep-v对其进行过滤以删除您不希望更改的文件,然后使用xargs在这些文件上运行sed-r-I的/image[12]\.jpg | png/image\1.pdf/g'。小心,sed-i执行就地替换,因此最好备份文件以防出现问题。您还可以使用sed-ibak让sed在修改文件之前使用bak扩展名进行备份。

更简单的方法是:

image3.jpg,image4.png->image3.jpg,image4.png *.jpg,*.png->*.pdf image3.JPG,image4.PNG->image3.JPG,image4.PNG 更简单的方法是:

image3.jpg,image4.png->image3.jpg,image4.png *.jpg,*.png->*.pdf image3.JPG,image4.PNG->image3.JPG,image4.PNG
将黑名单上的文件名替换为一些神奇的字符串,这样它们就不会看起来像文件名,也不会被任何东西匹配

cat your.tex | \
sed 's/image3.jpg/MMMAAAGGGIIICCC1/g' | \
sed 's/image4.png/MMMAAAGGGIIICCC2/g' | \
# ... all others on your blacklist
# then do regexp replacements
sed 's/\(image[0-9]\+\)\.\(png\|jpg\)/\1.pdf/g' | \
# ... convert all "magics" back
sed 's/MMMAAAGGGIIICCC1/image3.jpg/g' | \
sed 's/MMMAAAGGGIIICCC2/image4.png/g' | \
# ... and many others
# then output
cat > output.tex

将黑名单上的文件名替换为一些神奇的字符串,这样它们就不会看起来像文件名,也不会被任何东西匹配

cat your.tex | \
sed 's/image3.jpg/MMMAAAGGGIIICCC1/g' | \
sed 's/image4.png/MMMAAAGGGIIICCC2/g' | \
# ... all others on your blacklist
# then do regexp replacements
sed 's/\(image[0-9]\+\)\.\(png\|jpg\)/\1.pdf/g' | \
# ... convert all "magics" back
sed 's/MMMAAAGGGIIICCC1/image3.jpg/g' | \
sed 's/MMMAAAGGGIIICCC2/image4.png/g' | \
# ... and many others
# then output
cat > output.tex
那么您想替换*.tex文件中的引用?那么您想替换*.tex文件中的引用?