我想创建一个 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
对于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"