私はこれを含むファイル/出力を持っています:
igw_id = igw-96788cf1
private_route_tables_ids = [
rtb-c2adcda4,
rtb-c5a3c3a3,
rtb-c4adcda2
]
private_subnets_cidrs_ipv4 = [
10.20.10.0/24,
10.20.11.0/24,
10.20.12.0/24
]
private_subnets_ids = [
subnet-6057333b,
subnet-6be7bf0c,
subnet-f13419b8
]
public_route_tables_ids = [
rtb-74a9c912,
rtb-c5adcda3,
rtb-2aabcb4c
]
public_subnets_cidrs_ipv4 = [
10.20.0.0/24,
10.20.1.0/24,
10.20.2.0/24
]
public_subnets_ids = [
subnet-6157333a,
subnet-17e7bf70,
subnet-303f1279
]
すべてのパブリックサブネットIDを抽出し、空白なしで印刷したいと思います。
この正規表現を使用しました
sed -n '/public_subnets_ids/{:a;N;/\]/!ba;s/[[:space:]]//g;s/,/\n/g;s/.*public_subnets_ids\|\].*//g;p}' my_file.txt
そして、出力は次のとおりです。
=[subnet-6157333a
subnet-17e7bf70
subnet-303f1279
しかし、代わりにこれを取得したいと思います。
subnet-6157333a
subnet-17e7bf70
subnet-303f1279
実際、私はsedにスペースと改行を何(s/[[:space:]]//g)
も置き換えないように指示し、次に最初の新しい行を置き換えてから最初のサブネットを起動するので、最初の改行の後でこれを試すときに正規表現を処理します
sed -n '/public_subnets_ids = \[[\n\r\s]+\\n/{:a;N;/\]/!ba;s/[[:space:]]//g;s/,/\n/g;s/.*public_subnets_ids\|\].*//g;p}' my_file.txt
それは出力を与えません、それはそれが何にも一致しないことを意味します。
上記の正規表現を改善して、サブネットIDのみを別々の行に指定するのを手伝ってください。
このsedの別のアプローチ:
sed -n '/public_subnets_ids/,/]/{//!{s/[ ,]*//g;p;}}' file
'/public_subnets_ids/,/]/
:を含む行public_subnets_ids
から次の行まで]
//!
:アドレスに一致するものを除いて、一致する行に //!{s/[ ,]*//g;p;}
:コンマとスペース文字を削除し、結果を出力しますこの記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加