如何选择每行的第一个单词并将其归因于 bash 脚本中的数组

如何选择每行的第一个单词并将其归因于 bash 脚本中的数组

我想创建一个 bash 脚本,该脚本在“:”字符之前从文本文件中选择每行的第一个单词,并将其输出到数组中(1 行 1 个槽)。

现在我有这个:

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

我不知道在 sed 的条件下要放什么。

我有这个正则表达式:

/^([^:])+/gm

答案1

不需要子shell和sed,只需使用参数扩展:

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

在一个命令中删除所有子字符串可能会更快

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

答案2

对于bash4 或更高版本,您可以使用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"

相关内容