2つの文字列間の文字列を一致させるBash正規表現

2つの文字列間の文字列を一致させる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する方法を知っていますが、正規表現を編集して目的の操作を実行できることを確認してください。)

ベストアンサー1

GNUで操作を実行できます。sed

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

存在するsed

  • -nデフォルトでは、行は印刷されません。
  • /\.$/s///行末の「.」を削除します。
  • T最後に移動(上記の内容がない場合は何も印刷されないことを意味)
  • /.* /s///p印刷物が残るまですべて削除

または非GNU

sed -n '/ /s//\n/;/\n/D;s/\.$//p'
  • / /s//\n/n代わりにewlineを使用してください
  • /\n/Dewlineまですべて削除nして最初から始める
  • s/\.$//p「.」を削除すると、行末に残りの内容が印刷されます。

おすすめ記事