Text-Processing
如果文件中的兩行都符合模式,我該如何加入它們?
我有一個包含多行的文件,如果它們都符合特定模式,我想加入行。
我知道我可以找到適合該模式的線條並獲得下一行:
grep -E -A1 'Pattern' filename
但是我如何檢查下一行是否也符合模式,我將如何加入這兩者?
例如,我有一個這樣的文件:
Hello i am John Smith
範例模式可能如下:
'^[A-Z][a-z]+'
所以在這種情況下,如果它們都以大寫字母開頭,我想合併這些行。
我想要實現的輸出是:
Hello i am John Smith
/^[A-Z][a-z]+/{ :a N /\n[A-Z][a-z]+/{ s/\n/ / b a } }
另存為
join.sed
並執行:sed -Ef join.sed file
.如果該行與模式匹配,我們將啟動一個循環,將下一行附加到模式空間並用空格替換換行符,只要該行也與模式匹配。
對於 GNU Sed,您可以將其折疊為單行:
sed -E '/^[A-Z][a-z]+/{:a;N;/\n[A-Z][a-z]+/{s/\n/ /;b a}}' file
或者,一個 Awk 腳本 ,
join.awk
其模式應為p
:{ if($0~p)c+=1 else c=0 printf "%s%s", (c>1 ? " " : ors), $0 ors=ORS } END{print ""}
要執行:
awk -f join.awk p='^[A-Z][a-z]+' file
.