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

标签 regex linux bash shell sed

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

相关文章:

linux - 对 `fstat` 、 `lstat` 或 `stat` 的并行调用是否受到 linux 上打开文件限制的限制?

linux - 解析和不解析标志和参数时回显信息

php 将 preg_replace 转换为 preg_replace_callback

php - 以Apache的access.log为基础的网络分析系统Piwik

php - 去除除 src 之外的所有 HTML 属性

linux - 用于移动包含文件的子文件夹的命令,同时保持原始结构

linux - 如何丢弃原始套接字中的传入数据包?

c - 从 Linux 控制台显示图像

xml - 如何使用 xmlstartlet 选择和编辑 xml 节点?

Java围绕数字进行分割