空白文字に一致するテキストを解析するBashスクリプトの問題

空白文字に一致するテキストを解析するBashスクリプトの問題

次のような監査コマンドのリストがあります。

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" \newline" 文字IFS=$'\n'単語の分離\n結果の「ewline」文字にのみ発生します。引用しないコマンドの置き換え$(...)

  • 構文が知られている{ list; }グループ化コマンド私はコマンドのグループ化に精通しています。

  • このarray=(...)構文は関連項目を作成するために使用されます。大量に変数名はですarray

  • を使用すると、パターンに一致する一致のみを印刷しますgrep -Po 'name=[^-]+(?=\s*-)' infile-o"name="ハイフンを除いて、長さがゼロ以外の文字が続き、その後[^-]+にはハイフンまで0個以上のスペースが続きます(?=\s*-)


今後読む内容:

関連情報