Awk
AWK 幫助將數據過濾成 CSV
我們正在做一些安全研究,我需要從 Debian repos 中提取所有可用的包名稱、版本、desc 等。
我正在嘗試將輸出解析
apt-cache dumpavail
為 CSV,並將數據組織成表格形式,如名稱、版本、desc。我不太擅長 AWK,但我想它是完美的工具嗎?隨意向我推薦我可以為 AWK 製作一個好的正則表達式的方法。
我認為
sed
可能更適合,例如使用 GNU sed:解析.sed
/^Package: / { s///; h } /^Version: |^Description: / { s///; H } /^$/ { x; s/\n/;/gp }
解釋:
- 找到以所需前綴開頭的行,例如
/^Package/
- 刪除前綴
s///
,即用任何內容替換先前匹配的模式- 將其餘部分保存到保持空間 (
h
) 或 (H
),注意h
覆蓋保持空間- 當遇到包間空行 (
/^$/
) 時,交換保持空間和模式空間 (x
) 並用所需的分隔符替換換行符,這裡是分號 (s/\n/;/gp
) 並列印結果像這樣執行它:
apt-cache dumpavail | sed -nEf parse.sed
附加
head
輸出為:0ad;0.0.23-1+b1;Real-time strategy game of ancient warfare 0ad-data;0.0.23-1;Real-time strategy game of ancient warfare (data files) 0ad-data-common;0.0.23-1;Real-time strategy game of ancient warfare (common data files) 0xffff;0.8-1;Open Free Fiasco Firmware Flasher 2048-qt;0.1.6-1+b1;mathematics based puzzle game 2ping;4.2-1;Ping utility to determine directional packet loss 2vcard;0.6-1;perl script to convert an addressbook to VCARD file format fonts-3270;2.0.0-1;monospaced font based on IBM 3270 terminals 389-admin;1.1.46-2;389 Directory Administration Server libds-admin-serv0;1.1.46-2;Libraries for the 389 Directory Administration Server