Sed不在命令行中工作,但在线测试regex101中的正则表达式有效

时间:2017-08-25 10:30:30

标签: regex sed command-line

我有一个像

这样的字符串
 July 20th 2017, 11:03:37.620   fc384c3d-9a75-459d-ba92-99069db0e7bf

我需要从行的开头删除所有内容,直到UUID子字符串(它是一个标签,\ t就在UUID之前)。

我的正则表达式看起来像这样:

^\s*July(.*)\t

当我在regex101中对它进行测试时,它都可以正常运行:https://regex101.com/r/eZ1gT7/1077

然而,当我把它变成sed命令时,它不做任何替换:

less pensionQuery.txt  | sed -e 's/^\s*July(.*)\t//' 

其中pensionQuery.txt是一个文件,其中包含与上述类似的行。因此上面的命令只是吐出未修改的文件contnent。

我的 sed 命令错了吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

正则表达式是对的,您 尝试使用sed

--regexp-extended
  

'-E'   '--regexp-extended'

     

使用扩展正则表达式而不是基本常规表达式        表达式。扩展的正则表达式是egrep接受的那些;他们        可以更清楚,因为它们通常有较少的反斜杠。        从历史上看,这是一个GNU扩展程序,但-E扩展名为POSIX        自从被添加到echo -e $'July 20th 2017, 11:03:37.620\tfc384c3d-9a75-459d-ba92-99069db0e7bf' | sed -E 's/^\s*July(.*)\t//' fc384c3d-9a75-459d-ba92-99069db0e7bf 标准

以来
sed

还可以在Basic (BRE) and extended (ERE) regular expression

上进行简单的阅读
  

基本和扩展正则表达式是指定模式语法的两种变体。基本正则表达式(BRE)是grep中的默认值(类似于-r)。使用-Egrep -E选项(类似地,.val() )激活扩展正则表达式语法(ERE)。