sed 使用的注意事項
1.刪除命令的注意事項
sed 刪除命令能夠幫助我們更快的刪除待刪除的行。
你可以通過指定行號的範圍,類似於 1,2 這樣的表達式來刪除第一行與第二行。使用行號
定址的方法靈活性不夠,sed 還提供使用正則表達式匹配的方式來指定待刪除的地址。
下面是一個具體的示例:
/{/,/}/d
上面的命令首先匹配包含 ‘{’ 的行,以該行作爲第一個刪除行,刪除 ‘{’ 所在行到 ’}‘ 所在行
之間的所有行(包含邊界行)。
如果終止地址沒匹配到內容就會導致從起始地址開始之後的所有行都被刪除,如果你沒有測
試就指定了 -i 操作,那麼你可能會丟失部分文件的內容。
如果起始地址沒有匹配到則不會刪除任何行,等同於操作無效。
2.打印命令的注意事項
爲了避免直接使用 -i 造成的問題,我一般都會使用 -n 與 p 命令來查看修改的行,當
我確定沒有問題之後,我常常直接將 -n 改爲 -i 就開始執行,卻忘記了刪除 p 命令。這
樣導致的結果是每一個處理行都多輸出一次,多了很多重複行。
發現問題後,我使用 sed 的多行模式空間來刪除連續重複行,解決了上述問題。
3.多行模式空間的嵌套使用與匹配
我前幾天寫了下面的 sed 命令:
/^ *$/{
N
/.*<\/grid>/{
N
s/.*\n//
}
}
首先匹配空行或者只包含一個或多個空格的行,匹配成功後將下一行以 ‘\n’ 與當前行分隔
添加到模式空間中,然後對模式空間進行匹配,匹配子串成功則繼續將下一行以 ‘\n’ 分隔
追加到模式空間中,然後刪除前兩行。