Bash
Bash正則表達式,匹配兩個字元串之間的字元串
我正在使用
nslookup -q=srv SOME_ADDRESS
,並希望將返回的地址儲存在數組中。nslookup
返回:Server: 123.456.789.123 Address: 123.456.789.123#12 SOME_ADDRESS service = 0 0 1234 address-1.i.want. SOME_ADDRESS service = 0 0 1234 address-2.i.want. SOME_ADDRESS service = 0 0 1234 address-3.i.want.
我仍在學習正則表達式,我將字元串放入數組中:
array=($(nslookup -q=srv SOME_ADDRESS | grep -o ' [a-z0-9.-]*[a-z0-9].$'))
這給了我空白的地方
[ ]address-3.i.want.
。[ ]
我將如何僅
adress-3.i.want
在開頭和.
結尾沒有空格的情況下進行匹配?(使用正則表達式,而不是通過從結果字元串中刪除字元。我知道如何添加另一個grep
或cut
通過管道,但我確信我可以編輯正則表達式來做我想做的事)
任務可以由 GNU sed完成
nslookup -q=srv "${SOME_ADDRESS}" | sed -n '/\.$/s///;T;/.* /s///p' | mapfile -t array
在sed
-n
預設不列印行/\.$/s///
消除 ”。” 在行尾T
go to end(如果沒有發生上述操作,則意味著不列印)/.* /s///p
刪除所有內容,直到列印剩餘或非 GNU
sed -n '/ /s//\n/;/\n/D;s/\.$//p'
/ /s//\n/
用n
ewline 代替/\n/D
刪除所有 upton
ewline 並從頭開始s/\.$//p
如果刪除“。” 在行尾列印剩餘