使用正则表达式搜索和替换

使用正则表达式搜索和替换

问题描述:

我想从日志文件中删除一些动态文本。我能够使用regexgrep -oP来提取它,但是,相同的正则表达式不工作 与sed命令。使用正则表达式搜索和替换

的样本数据:(阅读ABCDEF只有LMNOP之间方便有关资料)

XXX 2 13:53:35 XXXX0-0-0 XXXXXXXX[3513]: ABCDEF[XXXX]: 1472846015.555671: LMNOP(79): XXXXXXXXXXXXX - XXXXXX XX XXX XXX XXXXX XX XXXXX XXXX XXX XXXX XXX 

以下是我想从日志文件中删除数据。我可以使用正则表达式+ grep将其解压:

grep -Po ']: [0-9]{10}\.[0-9]{6}:' sample 
]: 1472846015.555671: 

现在,如果我使用相同的正则表达式与sed命令它不是helping.Any建议?

我用sed下面的命令,它返回了我未更改的文件。

sed "s/]: [0-9]{10}\.[0-9]{6}://" input 

awk '{gsub(/]: [0-9]{10}\.[0-9]{6}:/,"")}1' input 

我需要以下的输出:

XXX 2 13:53:35 XXXX0-0-0 XXXXXXXX[3513]: ABCDEF[XXXX LMNOP(79): XXXXXXXXXXXXX - XXXXXX XX XXX XXX XXXXX XX XXXXX XXXX XXX XXXX XXX 

甚至更​​好:

XXX 2 13:53:35 XXXX0-0-0 XXXXXXXX[3513]: ABCDEF[XXXX]::LMNOP(79): XXXXXXXXXXXXX - XXXXXX XX XXX XXX XXXXX XX XXXXX XXXX XXX XXXX XXX 

进入sed使用:

sed "s/]: [0-9]\{10\}\.[0-9]\{6\}: /]::/" input 

“s /#1 /#2 /”指令的#1搜索该模式,但需要转义大括号(\{\})。然后将其替换为#2,它将向后添加]:,因为它处于搜索模式。如果您需要::,则将其添加到替换模式中,如上所述。

但也许你并不需要搜索和替换]:,只需更换数字和点到:用命令(它为你的例子)

sed "s/ [0-9]\{10\}\.[0-9]\{6\}: /:/" input 

您可以选择使用具有扩展的正则表达式的sed。但请注意,扩展正则表达式是GNU扩展,因此可能不便携。这是与@Konstantin Morenko建议的相同的sed,但没有{}的反斜杠。扩展正则表达式选项是-r--regexp-extended

sed -r "s/ [0-9]{10}\.[0-9]{6}: /:/" input