首页 > 解决方案 > 使用 Bash 脚本查找和替换 css 文件中的文件名

问题描述

我想编写一个 bash 脚本,它接受用户输入(这将是一个文件名)并用该文件名替换 css 文件中的文件路径。为简单起见,这两个文件将位于同一个文件夹中,并且在 css 代码中,仅应更改路径末尾的文件名。

我想过使用正则表达式来匹配任何具有特定模式的代码行,然后更改它的结尾。我知道 sed,但由于文件名总是改变,我不知道如何解决这个问题,而不是正则表达式。我还考虑在将文件名保存为值的 css 文件中添加一个变量,然后在路径的末尾添加该变量,但我不确定如何从 bash 脚本访问该变量。

关于如何解决这个问题的任何建议?

谢谢!

编辑添加更多信息: 这是我要编辑的 css 文件中的行。要更改的部分是最后的fileName.png。因为它会改变我想使用正则表达式来“找到”css文件中的正确位置。

background: #2c001e url(file:////usr/share/backgrounds/fileName.png/);

仅匹配此特定文件中此行的正则表达式如下。它可能会被简化,但我不明白为什么它也应该工作:)

(background)\:\s\#.{6}\s(url)\((file)\:\/{4}(usr)\/(share)\/backgrounds\/.+\.(png)\/\)\;

标签: cssbash

解决方案


要在运行时替换文件中的输入,您可以在脚本中使用此行

sed "s/stringToReplace/$1/g" templateFile >fileToUse

$1 引用第二个 bash 脚本参数(第一个是 $0,调用脚本的名称)。stringToReplace 将逐字写入模板文件中。

您还可以使用带有两个运行时参数($1、$2)的脚本,并且您可以使用 -i 选项更改 fileToUse 的原始内容。但这需要存储用作参数 $1 的最后一个文件路径。


推荐阅读