Korn Shellの各要素に正規表現を適用して文字列配列を繰り返します。

Korn Shellの各要素に正規表現を適用して文字列配列を繰り返します。

names名前といくつかの後続のジャンクデータを含む文字列配列があります。このように

Jill Shortz, City Contractor, America
Bill Torts, Family Doctor, Canada
Will Courtz, Folk DJ, Bulgaria
Phil-Lip Warts, Juggler, India

names正規表現を使用して最初の2つの単語のみを抽出して書き直し、(^\w+-*( *\w+)*)次のようにnames繰り返します。

Jill Shortz
Bill Torts
Will Courtz
Phil-Lip Warts

これは私が試したことですが、私のAIXシステムは-PPerlモードで実行しているときにパラメータが好きではありません。

for((i=0;i<${#names[@]};++i)); do
        names[$i]=`grep -P '(^\w+-*( *\w+)*)' -o <<<"${names[i]}"`
done

ベストアンサー1

最初のカンマの後のすべての項目を削除したいと仮定すると、正規表現がこの操作に役立つとは思いません。

names=( "${names[@]%%,*}" )
printf '"%s"\n' "${names[@]}"

これにより、各配列要素から最初のコンマとその後のすべての項目(文字通り「ワイルドカードパターンと一致する最長のサフィックス,*」)が個別に削除されます。その後、変更された名前の結果のリストが配列に再割り当てされてnames印刷されますprintf

質問のようなリストで配列を初期化することを考慮すると、このコードは次のように生成します。

"Jill Shortz"
"Bill Torts"
"Will Courtz"
"Phil-Lip Warts"

(二重引用符はprintfフォーマット文字列によって追加されます)。

このコードは、ksh93およびで動作します。bashzshyash

おすすめ記事