2016-11-11 66 views
0

我想從日誌文件中刪除一些動態文本。我能夠使用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 

回答

2

進入sed使用:

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

「s /#1 /#2 /」指令的#1搜索該模式,但需要轉義大括號(\{\})。然後將其替換爲#2,它將向後添加]:,因爲它處於搜索模式。如果您需要::,則將其添加到替換模式中,如上所述。

但也許你並不需要搜索和替換]:,只需更換數字和點到:用命令(它爲你的例子)

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

您可以選擇使用具有擴展的正則表達式的sed。但請注意,擴展正則表達式是GNU擴展,因此可能不便攜。這是與@Konstantin Morenko建議的相同的sed,但沒有{}的反斜槓。擴展正則表達式選項是-r--regexp-extended

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