2013-02-07 35 views
3

我有這樣我可以使用正則表達式的記錄分隔在AWK在Linux

fdsf fdsf fdsfds fdsf 
fdsfdsfsdf fdsfsf 
fsdfsdf var12=1343243432 

fdsf fdsf fdsfds fdsf 
fdsfsdfdsfsdf 
fsdfsdf var12=13432434432 

fdsf fdsf fdsfds fdsf 
fsdfsdf fdsfsf var12=13443432432 

測試文件現在我想用var12=\d+作爲記錄分隔符。這是可能的awk

+1

是的(請參閱其他答案),但將RS設置爲空字符串以空行分隔記錄對於發佈的輸入而言將非常有用,它可以在任何awk中使用。 –

回答

4

是的,但你應該使用[0-9]而不是\d

awk '1' RS="var12=[0-9]+" file 

IIRC,只有GNU awk可以使用多字符記錄分隔符。

結果:

fdsf fdsf fdsfds fdsf 
fdsfdsfsdf fdsfsf 
fsdfsdf 


fdsf fdsf fdsfds fdsf 
fdsfsdfdsfsdf 
fsdfsdf 


fdsf fdsf fdsfds fdsf 
fsdfsdf fdsfsf 

請,如果你需要進一步的幫助發表您所需的輸出。

+1

謝謝史蒂夫,你是我的英雄。你如何在這些工具中定期使用sed awk – user2024264

+1

。我學習SO。或者至少,我想我學會了。 + 1的全部。 – Steve

2

假設在Linux上GNU awk(又名gawk),是的。

RS

這是awk的輸入記錄分隔符。它的默認值是一個包含單個換行符的字符串,這意味着輸入記錄由一行文本組成。它也可以是空字符串,在這種情況下,記錄由空白行分隔開。 如果它是一個正則表達式,則記錄由輸入文本中正則表達式的匹配分隔。

來源:7.5.1 Built-in Variables That Control awkThe GNU Awk User's Guide

由於@steve says\d是不是在Regular Expression Operatorsgawk-Specific Regexp Operators列表,所以你需要在你的地方的\d使用bracket expression[0-9][[:digit:]]

但是,從您的問題中不清楚您的目標是什麼。我回答了你的問題,但我懷疑我已經解決了你的根本問題。另請參見What is the XY problem?

相關問題