Bash

Bash正則表達式,匹配兩個字元串之間的字元串

  • August 12, 2016

我正在使用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在開頭和.結尾沒有空格的情況下進行匹配?(使用正則表達式,而不是通過從結果字元串中刪除字元。我知道如何添加另一個grepcut通過管道,但我確信我可以編輯正則表達式來做我想做的事)

任務可以由 GNU sed完成

nslookup -q=srv "${SOME_ADDRESS}" | 
sed -n '/\.$/s///;T;/.* /s///p' | 
mapfile -t array

sed

  • -n預設不列印行
  • /\.$/s///消除 ”。” 在行尾
  • Tgo to end(如果沒有發生上述操作,則意味著不列印)
  • /.* /s///p刪除所有內容,直到列印剩餘

或非 GNU

sed -n '/ /s//\n/;/\n/D;s/\.$//p'
  • / /s//\n/newline 代替
  • /\n/D刪除所有 upto newline 並從頭開始
  • s/\.$//p如果刪除“。” 在行尾列印剩餘

引用自:https://unix.stackexchange.com/questions/302945