regex - sed 在时间戳周围添加引号

标签 regex bash sed

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

2018-08-22T13:06:04.442774Z

我想在所有与此特定表达式匹配的匹配项周围添加双引号。我正在尝试使用 sed,但似乎找不到正确的命令。我正在尝试围绕这些线路进行一些操作:

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/"$0"/g my_file.json

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

我应该如何更正该命令?

提前谢谢您。

最佳答案

您应该用单引号将 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

关于regex - sed 在时间戳周围添加引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007635/

相关文章:

java - 正则表达式:允许最少的字母数字、点和 - 字符。任何地方都允许使用星号?

javascript - 正则表达式到坐标WGS84?

macos - 如何在 Mac OS X Snow Leopard 上运行 bash 脚本?

bash - awk命令合并同一个文件的内容

javascript - 正则表达式 新正则表达式 - 替换所有文本而不是 [game_name]

当关键字出现在模式后面时,python 分割字符串

linux - 使用 awk 或 sed 比较两个文件的值并将文件 2 到文件 1 的信息附加到新文件 file3

regex - 获取所有匹配正则表达式的git分支并将其拆分为数组

linux - grep 中间带有通配符的文本

linux - 如何匹配 awk 中的 shell 变量?