【问题标题】:How to use 'sed' in shell script to replace a line in a file如何在 shell 脚本中使用“sed”来替换文件中的一行
【发布时间】:2015-11-09 13:32:25
【问题描述】:

我有一个文件,其中一行包含特殊字符,例如 % ^ #$ @#$。我尝试使用 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.efefef.gege=,

值:%6p [%d{HH:mm:ss}] %c{1}@%L: %m%n

需要用新值替换值:%7p [%d{HH:mm:ss}] %d{1}@%X

【问题讨论】:

  • 请根据来源和所需输出添加数据示例。
  • 旧值是什么重要吗?

标签: regex linux bash shell sed


【解决方案1】:

您忘记转义表达式中的特殊字符。

我做了一些更改:

  • 转义.,否则它将匹配任何字符。
  • 添加了^,因此键从行首开始(否则您可以匹配另一个键的后缀)。
  • 删除了对原始值的搜索(我认为它是什么并不重要),因此您不必转义那里的所有特殊字符。
  • 将替换部分中的键替换为\1,以避免代码重复。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2016-05-07
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多