変数を読むのに助けが必要です

変数を読むのに助けが必要です

私は現在Ubuntuに慣れています。複数のbashファイルを扱うプライベートプロジェクトがあります。

config.txt次の文字列を含むファイルがあります。

hostip="192.168.1.2"
pname="My Office"
pid="01-001"

hostip私の質問は、fileの変数が必要なbashファイルがある場合は文字列をどのようにconfig.txt抽出しますか192.168.1.2(二重引用符は出力から削除する必要があります)です。

答え1

awkこれを達成するためにこれを使用できます。たとえば、次のようになります。

$ awk -F'"' '/hostip/ {print $2}' host.txt
192.168.1.2
  • この-Fオプションはフィールド区切り文字を決定します。
  • /hostip/検索文字列の決定
  • {print $2}印刷するフィールドを決定します。

これにより、ファイルから文字列を取得し、bashスクリプト内の変数に入れることができます。たとえば、次のようになります。

hostip=$(awk -F'"' '/hostip/ {print $2}' host.txt)

答え2

使用sed

sed -n "s/hostip=\([^ ]*.*\)/\1/p" config.txt

ただし、config.txt宣言にスペースが含まれている場合(例:)hostip = 192.168.1.2

sed -n "s/hostip *= *\([^ ]*.*\)/\1/p" config.txt

最後に、人生をより簡単にするために関数やラッパースクリプトを作成します。

get_value() { 
    sed -n "s/$1 *= *\([^ ]*.*\)/\1/p" $2
}

get_value hostip config.txt
# prints 192.168.1.2
get_value pname config.txt
# prints My Office

hostip=$(get_value hostip config.txt)

答え3

Raku(旧Perl6)を使う

~$ raku -ne 'put $/ if m/ <?after  hostip\= > \" <([\d**1..3 \.]**3 \d**1..3)> \" /;' config1.txt
192.168.1.2

コマンド-neラインフラグはRakuに入力を1行ずつ確認するように指示します。上記のコードは、次のように書かれた正のゼロ幅LookBehindアサーションを使用します<?after … >。正規表現は、ピリオドで区切られた1〜3桁の数字グループの4つの数字グループに一致する項目を探します。この<( … )>イディオムはRakuに各外部一致を削除し、内部一致を返され$/た一致変数にロードするように指示します。

HTH。

https://raku.org

関連情報