2017-09-23 68 views
1

輸入:搜索模式和使新線與它

2:this is a sentence 221j: 54: this another sentence: 4245: again a sentence 3:the last sentence 

輸出

this is a sentence 221j: 
this another sentence: 
again a sentence 
the last sentence 

的snipet應搜索由以下1或2或3個數字 ':'。把所有的':'全部放在下一個模式之後,並且用新的模式。

+2

如果你只想要替換'1或2或以下3個數字 ':''和'\ N'那麼爲什麼是4位'4245 :'成爲'\ n'而不是'4 \ n'? –

+0

而你爲什麼不用一個換行符替換前導'2:'?看來你只是在刪除它。 –

+0

對不起4245:應該是424: - 這是一個錯字 – achille

回答

1

能否請您嘗試以下的awk(在GNU AWK測試)太讓我知道,如果這可以幫助你,也該是在提供樣品測試INPUT_FILE只。

awk -v RS='[0-9]+:' 'NF{gsub(/^ |\n/,"");print}' Input_file 

輸出如下。

this is a sentence 221j: 
this another sentence: 
again a sentence 
the last sentence 

說明:

awk -v RS='[0-9]+:' ' ##Setting Record Separator as all the digits together with colon. 
NF{     ##Then checking if line is NOT blank by checking NF(number of fields) are NOT null, if yes then do following. 
gsub(/^ |\n/,""); ##Globally substituting starting space and new line with NULL in current line. 
print    ##printing the current line. 
} 
' Input_file  ##Mentioning the Input_file here. 
+1

請注意,在標準awk中不支持使用RS與多個字符:「如果RS包含多個字符,結果未指定。」但這是一個好方法。 –

+0

個人而言,我會將其簡化爲'gawk NF RS ='[0-9] +:*''並擔心不合需要的空白行,但不清楚OP實際需要什麼。 –

+0

感謝William的鼓勵,當然我應該補充說它是在GNU awk中編寫和測試的。 – RavinderSingh13

2

AWK溶液:

awk -F'[0-9]+:[[:space:]]*' '{for(i=1;i<=NF;i++) if($i) print $i}' inputfile 
  • -F'[0-9]+:[[:space:]]*' - 複合字段分隔

輸出:

this is a sentence 221j: 
this another sentence: 
again a sentence 
the last sentence 
1

這確實你說什麼你想(更換1,2,或3位數字:):

$ awk '{sub(/[0-9]{1,3}: */,""); gsub(/ *[0-9]{1,3}: */,ORS)}1' file 
this is a sentence 221j: 
this another sentence: 4 
again a sentence 
the last sentence 

如果你真正想要的是更換任何整數,其後:你的樣品輸入/輸出指示那麼這會是:

$ awk '{sub(/[0-9]+: */,""); gsub(/ *[0-9]+: */,ORS)}1' file 
this is a sentence 221j: 
this another sentence: 
again a sentence 
the last sentence 
+0

@ RavinderSingh13:它的工作原理!你可以解釋一下你做了什麼,以便我下次修改或重新使用snipet。非常感謝! – achille

+0

您的第二個解決方案有效!一些小的解釋將不勝感激。非常感謝 – achille

+0

@achille:謝謝,我現在用我的代碼添加了解釋,讓我知道是否有任何查詢。 – RavinderSingh13