各行の最初の単語を選択し、bashスクリプトで配列にプロパティを割り当てる方法

各行の最初の単語を選択し、bashスクリプトで配列にプロパティを割り当てる方法

「:」文字の前にあるテキストファイルの各行の最初の単語を選択して、配列(1行1スロット)に出力するbashスクリプトを作成したいと思います。

今私はこれを持っています:

while read p; 
do
  arr+=$p | sed -r 's///'
done <test.txt

sed条件に何を入れるべきかわかりません。

この正規表現があります。

/^([^:])+/gm

答え1

サブシェルとsedは不要で、パラメータ拡張のみを使用できます。

while read p ; do
  arr+=( "${p%%:*}" )
done < test.txt

1つのコマンドですべての部分文字列を削除する方が高速です。

while read p ; do
    arr+=("$p")
done < test.txt
arr=("${arr[@]%%:*}")

答え2

bashバージョン 4 以降の場合は、readarray次のように配列を直接読み取ることができます。

readarray -t arr < <( awk -F ':' '{ print $1 }' file.in )

コードawkはプロセス交換で実行され、データを提供します。:各行の最初のフィールドのみを抽出します。

file.inasの例

roses are:red
violets:are blue
sugar is:sweet and
so:are
you:.
$ readarray -t arr < <( awk -F ':' '{ print $1 }' file.in )
$ printf '"%s"\n' "${arr[@]}"
"roses are"
"violets"
"sugar is"
"so"
"you"

関連情報