我有一个文件,其中一行包含特殊字符,例如 % ^ #$ @#$。我尝试使用 sed 工具用这样的模式替换这一行(名称=值,其中值包含特殊字符)。
sed -i 's|abc.defef.efefef.gege=%6p [%d{HH:mm:ss}] %c{1}@%L: %m%n|abc.defef.efefef.gege=%7p [%d{HH:mm:ss}] %d{1}@%X|g' FILE_NAME
我该怎么做?
示例:
名称:abc.defef.efeffef.gege=,
值:%6p [%d{HH:mm:ss}] %c{1}@%L: %m%n
需要将值替换为新值:%7p [%d{HH:mm:ss}] %d{1}@%X
最佳答案
您忘记转义表达式中的特殊字符。
我做了一些更改:
- 转义
.
,否则它将匹配任何字符。 - 添加了
^
,因此键从行首开始(否则您可以匹配另一个键的后缀)。 - 删除了对原始值的搜索(我认为它是什么并不重要),因此您不必转义那里的所有特殊字符。
- 将替换部分中的键替换为
\1
,以避免代码重复。
sed 's|^\(abc\.defef\.efefef\.gege=\).*|\1%7p [%d{HH:mm:ss}] %d{1}@%X|g'
关于regex - 如何在shell脚本中使用 'sed'替换文件中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610269/