这是你如何显示的最后一行:
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'
这将有助于如果你展示了一些输入数据。
-r
选项使grep
递归。这意味着它将操作目录和的子目录中的文件。那是你的意图吗?
grep
和sed
中的点代表任何字符。如果你想要字面点,你需要逃避它们。
grep
和sed
命令中的最终逃逸美元符号将被视为文字美元符号。如果您想要锚定到该行的末尾,则应该删除该转义。
.*
仅作为字符串在sed
s
命令的右侧起作用。如果要包含左侧的匹配项,则需要使用捕获组。仅当模式在一行中出现多次时,才需要s
命令中的g
修饰符。
使用引号,引号,引号,引号很难阅读。使用双引号来允许变量扩展。
尝试使用您自己的grep
命令,而不使用xargs
和sed
来查看它是否生成文件列表。
这可能是更接近你想要什么:
grep -lr -e "\$rev -.$repUpRev.$" *.html | xargs sed -i "s/\$rev -.$repUpRev.$/\$rev -REPLACEMENT_TEXT/g"
,但你仍然需要确定g
修改,点,最终美元符号等等,都是你打算什么。
你在用什么外壳?当你只说“不工作”时,这不是很有帮助。请详细说明错误消息或行为与预期的不同之处。 – 2010-08-09 15:15:38