繁体   English   中英

Shell脚本,用于替换文件夹中所有文件中的令牌

[英]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递归。 这意味着它会在目录及其子目录中的文件进行操作。 那是你打算的吗?

grepsed的点代表任何字符。 如果需要文字点,则需要对其进行转义。

grepsed命令中最后一个转义的美元符号将被视为文字美元符号。 如果要锚定到行尾,则应删除转义符。

.*仅作为sed s命令右侧的文字字符串。 如果要包括左侧匹配的内容,则需要使用捕获组。 仅当模式在一行中出现多次时,才需要s命令上的g修饰符。

使用引号,取消引用,引用,取消引用很难阅读。 使用双引号允许变量扩展。

单独尝试不带xargssedgrep命令,以查看它是否正在生成文件列表。

这可能更接近您想要的:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM