2017-10-09 56 views

回答

2

那麼,這是不是regex這是通過使用gawk多字符RS

awk -v RS='}}}|{{{' 'NF' inputfile 

     How 
     R 
     U 

Hi 

您可以pipe上面像這樣sed -r 's/^ +//g'在該行的開始刪除多餘的空格命令。

+0

你能解釋一下這個命令你寫的是什麼? – user247430

+0

默認情況下'awk'將每行視爲記錄,將'\ n'視爲記錄分隔符('RS')。在這裏,我們強迫awk將記錄分隔符視爲'{{''或'}}} –

+0

爲什麼使用管道和NF做什麼 – user247430

0

通過使用正則表達式,這變得棘手,主要是因爲grepawk似乎不支持lookahead

解壓或只匹配花括號,可以使用此正則表達式中的文本:https://regex101.com/r/ASFIFa/1

[^{\}]+(?=}) 

因此你可以給一個嘗試到ag - The Silver Searcher,像這樣產生您所需的輸出:

$ ag -o '[^{\}]+(?=})' input.txt 

刪除前導空格:

$ ag -o '[^{\}]+(?=})' input.txt | sed 's/^ *//' 
0

使用sed

sed '/{{{/!d;:A;/\}\}\}/!{N;bA};s/{{{//;s/}}}//;s/ *//g' infile 

或者

sed -E '/\{{3}/!d;:A;/\}{3}/!{N;bA};s/\{{3}| *|\}{3}//g' infile