![從平面檔案資料庫中刪除某些對象](https://rvso.com/image/83477/%E5%BE%9E%E5%B9%B3%E9%9D%A2%E6%AA%94%E6%A1%88%E8%B3%87%E6%96%99%E5%BA%AB%E4%B8%AD%E5%88%AA%E9%99%A4%E6%9F%90%E4%BA%9B%E5%B0%8D%E8%B1%A1.png)
我有一個平面文件資料庫,我需要從中刪除某些物件。
文件中有很多區塊,但我對OBJECT NickCore
區塊中的 2 個物件感興趣。
下面的例子:
OBJECT NickCore
DATA display SomeUser
DATA pass sha256:2b35341220119fad48762e4f843d1544354f8b196cf09bf1b4ea39f9a31be063:5ff60fae76026907102419460aae83aa74daf374048940b612ef83460043b565
DATA email [email protected]
DATA language
DATA access SomeUsero@*.5A5E5CBA.81D21A52.IP
DATA memomax 20
DATA MEMO_SIGNON 1
DATA MEMO_RECEIVE 1
DATA HIDE_EMAIL 1
DATA HIDE_MASK 1
DATA NS_PRIVATE 1
DATA AUTOOP 1
DATA KILLPROTECT 1
DATA NS_SECURE 1
END
我想從文件中的每個區塊中刪除DATA display
和。DATA pass
OBJECT NickCore
所需的輸出只是逗號分隔:
SomeUser,sha256:2b35341220119fad48762e4f843d1544354f8b196cf09bf1b4ea39f9a31be063:5ff60fae76026907102419460aae83aa74daf374048940b612ef83460043b565
我應該用什麼來做到這一點?
答案1
使用 GNU sed:
sed -n '/^OBJECT NickCore/,/^END/{s/^DATA display //;Ta;h;:a;s/DATA pass //;Tb;H;g;s/\n/,/p;:b}' file
看:man sed
答案2
Perl 1-liner:
perl -lne '$u=$1 if(/^DATA display (\S+)/);print "$u,$1" if(/^DATA pass (\S+)/)' filename