我的文件中包含一行包含%^#$ @#$等特殊字符。我尝试使用sed工具将此行替换为这样的模式(name = value其中value包含特殊字符)。
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.efefef.gege=,
价值:%6p [%d{HH:mm:ss}] %c{1}@%L: %m%n
需要使用新值替换值:%7p [%d{HH:mm:ss}] %d{1}@%X
答案 0 :(得分:1)
你忘了逃避表达式中的特殊字符。
我做了一些改变:
.
,除此之外,它会匹配任何字符。^
,因此密钥从该行的开头开始(否则您可以匹配另一个密钥的后缀)。\1
替换替换部分中的密钥,以避免代码重复。 sed 's|^\(abc\.defef\.efefef\.gege=\).*|\1%7p [%d{HH:mm:ss}] %d{1}@%X|g'