我需要帮助将下面grep命令的输出设置为每行的变量。
while read line; do
grep -oP '@\K[^ ]*' <<< $line
done < tweets
上面显示了我想要的内容:
lunaluvbad
Mags_GB
等等......
但是,如果我会这样做:
while read line; do
usrs="grep -oP '@\K[^ ]*' <<< $line"
done < tweets
echo $usrs
它显示了奇怪的结果,当然不是我正在寻找的结果。我需要$ usrs来显示我上面提到的内容。例如:
lunaluvbad
Mags_GB
答案 0 :(得分:2)
使用BASH数组和command substitution
,如下所示:
users=()
while read -r line; do
users+=( "$(grep -oP '@\K[^ ]*' <<< "$line")" )
done < tweets
或者使用process substitution
:
users=()
while read -r line; do
users+=( "$line" )
done < <(grep -oP '@\K[^ ]*' tweets)
printf "%s\n" "${users[@]}"
答案 1 :(得分:2)
根本不需要循环。 grep
无论如何都会遍历输入的行:
usrs=$(grep -oP '@\K[^ ]*' tweets)