「:」文字の前にあるテキストファイルの各行の最初の単語を選択して、配列(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.in
asの例
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"