sed在时间戳周围添加引号

时间:2018-10-26 11:21:26

标签: regex bash sed

我有一个大文件,其中包含以下格式的时间戳:

UrlFetchApp

我想在所有与该特定表达式匹配的出现处添加双引号。我正在尝试使用sed,但似乎无法找到正确的命令。我正在尝试以下方法:

2018-08-22T13:06:04.442774Z

我非常确定问题出在我的“替换”表达式上。

我应该如何纠正命令?

谢谢。

2 个答案:

答案 0 :(得分:1)

您应将sed替换命令用单引号引起来,并在RHS中使用&而不是$0来替换整个匹配项:

sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}Z/"&"/g' file > outfile

请参见online demo

此外,如果要匹配点而不是任何字符,请不要忘记转义.字符。

如果您使用ERE语法,也可以删除过多的转义符:

sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{6}Z/"&"/g'

如果您想change the file inline,请使用-i选项,

sed -i 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}Z/"&"/g' file

答案 1 :(得分:1)

以下作品:

sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}Z\)/"\1"/g' my_file.json

多次修改:

  • 将命令用单引号引起来
  • 使用\(\)创建一个组(在替换部分中由'\ 1`引用)
  • 转义“。”和“ {”和“}”字符