次のファイルがあります。
-config1
-config2 param2
-config3 param3a param3b
-config4 param4
以下を使用して抽出できますparam2
。
echo $(<file) | cut -d' ' -f3
しかし、私はいつも次の単語を取得できるように修正して、
-config2
これらの単語が並べ替えられているか何かが挿入されたときに私のコマンドが機能し続けたいと思います。何を見るべきですか?
説明:特定の行に複数のパラメーターがある可能性があります(またはまったくない場合があります)、-config
常に1行に最大1つのオプションがあります。
答え1
私はこれにawkを使用します
awk '/^-config2/ {print $2}' file
で始まる行の2番目の引数を印刷します-config2
。^
行の始まりを示します。
答え2
この試み:
perl -ne 'if (/-config2\s*(.*)/) { print "$1\n"; }'
これは一致する行を見つけ、その-config2
行の残りの部分を印刷します(\s*
スペースの量に一致し、(.*)
何でも一致してバインドします$1
)。
私の以前の答えは、その後-config2
に単語が続くと仮定しています。
perl -ne 'if (/-config2\s*(\S+)/) { print "$1\n"; }'
これは一致する行を見つけ、-config2
その後の最初のトークンを印刷します(\s*
空白の量と一致し、(\S+)
空白以外の文字の空でないシーケンスと一致し、それにバインドされます$1
)。
答え3
sedの変形:
sed -n 's/^-config2 //p' file
-n
自動印刷抑制
s/^-config2 //
-config2
パターン空間で何でも開始する行の置換と末尾のスペース
p
印刷パターンスペース