Linux
來自txt文件的awk中的正則表達式,一行
我目前正在編寫一個擦除硬碟驅動器的腳本。第一個腳本已經在執行並檢查是否有新的硬碟可用。如果有可用的新磁碟,它將在 a 中列出
statuslist.txt
並用於areca_cli disk create drv=X
將其設置為Pass Through
。在
statuslist.txt
所有新磁碟中都按插槽號和型號類型儲存。不幸的是,所有條目都列在一行中,而不是每行中的每個條目。我認為這使與statuslist.txt
.參賽作品:
Slot#1 ST3500413AS Slot#2 SEAGATE ST32000444SS Slot#3 INTEL SSDSC2BA100G3 Slot#6 ST320LT007-9ZV142 Slot#8 SEAGATE ST32000444SS
對於
statuslist.txt
我使用以下命令。slist=$(areca_cli disk info | awk -F " *" '{if ($5 != "N.A." && $7 == "Free") print($4" "$5); }') echo $slist >> /home/user/statuslist.txt
這是第二個擦除硬碟驅動器的腳本
statuslist.txt
。if 語句檢查是否有任何條目在
statuslist.txt
then 用於dd
擦除它們。sdx=$(lsscsi | awk '{if ($5 == "R001" && $5 != "-" ) print $NF}' | awk '{ print $0}') x=$(cat /home/user/statuslist.txt | awk '{if ( $1 ~/slot#*/)print $1}') if [ ${#wipe[@]} -gt 0 ]; then for i in $x; do dd if=/dev/zero of=$sdx bs=10M status=progress; done echo "Following hard drives are getting wiped:" $x else echo "dd didn't work" fi
我對這個腳本的期望是,
dd
它只在硬碟驅動器上使用statuslist.txt
。此列表的目的是避免重新擦除已擦除的硬碟驅動器。擦除硬碟驅動器的條目將從文本文件中刪除。我遇到的問題是這個變數的正則表達式。
x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')
我沒有得到任何輸出。
您需要遍歷欄位:
x=$(awk '{ for (i = 1; i < NF; i++) { if ($i ~ /^Slot#/) { print $(i + 1) } } }' /home/user/statuslist.txt)
(這也修復了“slot”錯字,大小寫很重要)。
我不確定你是如何在後續循環中嘗試使用它的,你不會
sdx
隨著你的改變而改變x
……