Regex 任何人都可以为此提供正则表达式:“quot;日期时间“&引用;2014年11月28日00:00:00.000Z;,

Regex 任何人都可以为此提供正则表达式:“quot;日期时间“&引用;2014年11月28日00:00:00.000Z;,,regex,unix,datetime,Regex,Unix,Datetime,我需要在文本文件中搜索并替换这一完整行 “日期时间”:“2014-11-28:00:00.000Z” 其中日期字符串可以变化 尝试不同的正则表达式,但没有效果。我试过: “日期时间”:“[A-Z0-9:.]*”,一个简单的正则表达式 ^"datetime":.*$ 可能有帮助 $ echo '"datetime": "2014-11-28T00:00:00.000Z",' | sed 's/^"datetime":.*$/replaced/' replaced 超级简单解决方案: "date

我需要在文本文件中搜索并替换这一完整行

“日期时间”:“2014-11-28:00:00.000Z”


其中日期字符串可以变化

尝试不同的正则表达式,但没有效果。我试过:

“日期时间”:“[A-Z0-9:.]*”,

一个简单的正则表达式

^"datetime":.*$
可能有帮助

$ echo '"datetime": "2014-11-28T00:00:00.000Z",' | sed 's/^"datetime":.*$/replaced/'
replaced
超级简单解决方案:

"datetime": "[^"]+"
[^”]
表示“匹配不是引号的任何字符,
+
表示必须匹配多个字符(至少一个)。请注意,
+
是扩展的正则表达式语法(您必须使用
grep-E
egrep
,标准
grep
可能不知道它;对于
sed
,在命令行上使用
sed-E

当然这里没有语法检查。该正则表达式也将匹配:

"datetime": "banana"
如果您还需要语法验证,正则表达式将是:

"datetime": "[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{3}Z"
{x}
表示“重复x次”,而
[0-9]
表示“任意数字”。所有其他字符(
-
T
Z
)都与其匹配


有些人可能想知道为什么结尾处的
[.]
实际上是指任何字符,我们不想在那里匹配任何字符,只想匹配一个句点。我本来可以写
\.
,但是当在shell或脚本中使用时,可能需要多个反斜杠才能获得正确的转义级别(例如,在引号中它是
\.
等等),我不喜欢这样,它很难看而且容易出错。相反,我把它放在一个字符类中,因为在一个字符类周期内是一个普通字符,不需要转义。

“其中日期字符串可以变化。”?这是什么意思?你需要更详细,否则只可能在没有任何格式检查的情况下捕获所有内容,比如
“datetime”:“[^”]+”
,谢谢,正则表达式可以工作!比我之前处理的东西简单得多。文本是一个键值对,日期值可以变化,例如:2014-11-28800:00.000Z,也可以是1996-01-01T14:35:34.223Z