[英]shell scripting for token replacement in all files in a folder
喜
我对Linux Shell脚本不是很好,我正在尝试按照Shell脚本来替换
指定目录下所有html文件中的修订号令牌$rev -<rev number>
cd /home/myapp/test
set repUpRev = "`svnversion`"
echo $repUpRev
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'
这似乎不起作用,上述代码有什么问题?
rev=$(svnversion)
sed -i.bak "s/$rev/some other string/g" *.html
regexp字符串中的$ rev是什么? 它是另一个变量吗? 或者,您正在寻找字符串'$ rev'。 如果是后者-我建议在$之前添加“ \\”,否则将被视为特殊的正则表达式字符...
这是显示最后一行的方式:
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'
如果您显示一些输入数据,将会有所帮助。
-r
选项使grep
递归。 这意味着它会在目录及其子目录中的文件进行操作。 那是你打算的吗?
grep
和sed
的点代表任何字符。 如果需要文字点,则需要对其进行转义。
grep
和sed
命令中最后一个转义的美元符号将被视为文字美元符号。 如果要锚定到行尾,则应删除转义符。
.*
仅作为sed
s
命令右侧的文字字符串。 如果要包括左侧匹配的内容,则需要使用捕获组。 仅当模式在一行中出现多次时,才需要s
命令上的g
修饰符。
使用引号,取消引用,引用,取消引用很难阅读。 使用双引号允许变量扩展。
单独尝试不带xargs
和sed
的grep
命令,以查看它是否正在生成文件列表。
这可能更接近您想要的:
grep -lr -e "\$rev -.$repUpRev.$" *.html | xargs sed -i "s/\$rev -.$repUpRev.$/\$rev -REPLACEMENT_TEXT/g"
但您仍然需要确定g
修饰符,点,最后的美元符号等是否符合您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.