次のような監査コマンドのリストがあります。
1. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
2. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
3. -a *policy name=Policy Name -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
各name=Value
変数を 。これは標準モードなので、読み取りを正常に使用しましたが、空白の行(3行目を参照)に達すると、すべての変数がオフセットされます。行の各単語を繰り返し、特定のパターンを一致させることなくこの問題を解決する方法がわかりません。誰かがより良い解決策を持っていることを願っています。
答え1
配列変数を使用すると、bash
次のことができます。
{ IFS=$'\n'; array=($(grep -Po 'name=[^-]+(?=\s*-)' infile)); }
その後、配列の要素を印刷します(Bashの配列インデックスは0から始まります)。
printf '%s\n' "${array[@]}"
name=PolicyName
name=PolicyWorkflow
name=PolicyAction
name=PolicyName
name=PolicyWorkflow
name=PolicyAction
name=Policy Name
name=PolicyWorkflow
name=PolicyAction
または単一の要素のみを印刷します。
printf '%s\n' "${array[6]}"
name=Policy Name
私達は定義する
IFS
"\n
ewline" 文字IFS=$'\n'
に単語の分離\n
結果の「ewline」文字にのみ発生します。引用しない–コマンドの置き換え$(...)
。構文が知られている
{ list; }
グループ化コマンド私はコマンドのグループ化に精通しています。この
array=(...)
構文は関連項目を作成するために使用されます。大量に変数名はですarray
。を使用すると、パターンに一致する一致のみを印刷します
grep -Po 'name=[^-]+(?=\s*-)' infile
。-o
"name="
ハイフンを除いて、長さがゼロ以外の文字が続き、その後[^-]+
にはハイフンまで0個以上のスペースが続きます(?=\s*-)
。- 構文は次のとおり
(?=...)
です。期待されるgrepの-P
オプションを使用すると、パターンを次のように解釈するために使用できます。Perl互換正規表現(PCRE)。
- 構文は次のとおり
今後読む内容: