此问题已在此处有答案:
Is it possible to escape regex metacharacters reliably with sed(4个答案)
5天前关闭。
我正在尝试使用sed
替换文本文件中的字符串。该字符串可以包含任何特殊字符,如.
、/
、$
等。然而,我有兴趣替换这样一个字符串 * 字面上 *,也就是不解释.
,/
,$
等。作为特殊人物。
简单的说明sed -i s|$old|$new| "$path_to_file"
例如,如果我想用20.9
替换20.8
,它就不能像我期望的那样工作。
当然,在启动使用这个sed
的脚本之前,我不知道用户将把特殊字符放在哪里。
有没有一种方法可以使用sed
或任何其他工具(perl
,awk
等)来完成此操作?
谢谢!
1条答案
按热度按时间xzlaal3s1#
如果file不包含null,并且在内存中很合适,你可以直接使用bash参数扩展:
不要忘记双引号,它们禁用特殊模式字符。
注意事项:
date=$(...)
去掉尾随的换行符;使用mapfile
保存它们echo
在某些转角条件下可能产生非预期输出;使用printf
来避免它们所以,稍微长一点但改进了很多的版本: