1. awk 'BEGIN{RS="<!--|-->"}NR%2' urfile
2. sed '/<!--/{:a;/-->/!{N;ba}};/<!--/d'
RS (Record Separator), 記錄分隔符 RS="<!--|-->" 設置記錄分隔符爲<!--或者-->,兩者皆可用於分隔記錄。 start<!--abcdefg-->123 這樣分割出來就是三條記錄start , abcdefg 和 123. NR (Number of Records), 記錄數,awk是以行(記錄)爲單位處理文本的,每讀入一行NR就增1 NR%2 ,我換一種寫法你就明白了:NR%2 != 0 {print} 就是說,只打印奇數行。
追問
額,首先謝謝您的回答。NR%2是打印奇數行,這個奇數行是指整個文檔的奇數行嗎? 比如 (1)例子1:start<!--abcdefg-->123 期望結果:start 123 。實際結果:start 123。 (2)例子2: testLine1 start<!--abcdefg-->123 實際結果:testLine1 start 和123。 疑問就出來了,這個奇數行該怎麼理解呢?
追答
RS="<!--|-->" 設置記錄分隔符爲<!--或者-->,兩者皆可用於分隔記錄。 奇數行,這裏的“行”指的是通過awk的記錄分隔符分割出來的記錄。awk中的一條記錄就是一行。 例子2中,分割出來就是: testLine1\nstart (這是一條記錄,換行用\n表示) abcdefg 123 打印的時候,\n自動還原爲換行符。