如何在shell脚本中使用'sed'来替换文件中的一行

时间:2015-11-09 13:32:26

标签: regex linux bash shell sed

我的文件中包含一行包含%^#$ @#$等特殊字符。我尝试使用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

1 个答案:

答案 0 :(得分:1)

你忘了逃避表达式中的特殊字符。

我做了一些改变:

  • 转发.,除此之外,它会匹配任何字符。
  • 添加了^,因此密钥从该行的开头开始(否则您可以匹配另一个密钥的后缀)。
  • 删除了对原始值的搜索(我认为它无关紧要),因此您不必转义那里的所有特殊字符。
  • \1替换替换部分中的密钥,以避免代码重复。

sed 's|^\(abc\.defef\.efefef\.gege=\).*|\1%7p [%d{HH:mm:ss}] %d{1}@%X|g'