我的意图是将所有* .less文件制作成style.css
我对这个sed不是很熟悉,但是我已经解决了这个问题,这要归功于: http://forums.devshed.com/unix-help-35/unix-find-and-replace-text-within-all-files-within-a-146179.html
for file in $(grep -rl ".less" *.php)
do
sed -e "s/\/*.less/\/style.css/ig" $file > /tmp/tempfile.tmp
mv /tmp/tempfile.tmp $file
done
现在这需要我的文件:
css/somefile.less
css/somefileagain.less
css/style.css
index.php
链接到php文档
<link rel="stylesheet" type="text/css" href="css/somefile.less" />
<link rel="stylesheet" type="text/css" href="css/somefileagain.less" />
我的结果变成了
<link rel="stylesheet" type="text/css" href="css/somefile/style.css" />
<link rel="stylesheet" type="text/css" href="css/somefileagain/style.css" />
这不是我想要的。我想让它成为相同的路径,我认为我缺少的是正则表达式中的*,它不会被sed取代。有什么方法可以让它工作,我的尝试是使它看起来像这样:(我想用/style.css替换/ to。)
\/*.less
但仍然没有用,也许这种方法不是最好的,如果有任何标志可以取代*,我需要一些建议,谢谢。
我得到的另一个问题是我不能在grep中使用-r / -R / - 递归而我不知道为什么,我正在运行Debian。任何提示都表示赞赏。
/马库斯
答案 0 :(得分:2)
您需要在for循环中使用以下sed命令:
sed -i.bak "s~/[^/]*\.less"~/style.css"~g" $file
无需将sed的输出存储在单独的文件中,然后将该temp文件恢复为原始文件。所有这些都可以使用-i
选项完成。
答案 1 :(得分:1)
这可能对您有用:
sed -i 's|[^/]*\.less|style.css|ig' $file