SED Unix命令,需要帮助将.less文件更改为style.css

时间:2012-01-21 20:17:13

标签: regex unix sed

我的意图是将所有* .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。任何提示都表示赞赏。

/马库斯

2 个答案:

答案 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