如何提取grep并切入bash数组

我试过了:

这里是file.txt的内容

some other text #1.something1=kjfk #2.something2=dfkjdk #3.something3=3232 some other text 

bash脚本:

 ids=( `grep "something" file.txt | cut -d'.' -f1` ) for id in "${ids[@]}"; do echo $id done 

结果:

 (nothing newline...) (nothing newline...) (nothing newline...) 

但它打印的是什么都没有像每一个这样的编号find我失踪的新行?

你的grepcut应该可以工作,但是你可以使用awk并把2个命令合并为一个:

 while read -r id; echo "$id" done < <(awk -F '\\.' '/something/{print $1}' file.txt) 

填充数组:

 ids=() while read -r id; ids+=( "$id" ) done < <(awk -F '\\.' '/something/{print $1}' file.txt) 

您可以使用grep-o选项来仅输出正则表达式匹配的文本:

 $ ids=($(grep -Eo '^#[0-9]+' file.txt)) $ echo ${ids[@]} #1 #2 #3 

这当然不会检查线上是否存在一段时间…如果这很重要,那么您可以使用另一个管道扩展它:

 $ ids=($(grep -Eo '^#[0-9]+\.something' file.txt | grep -o '^#[0-9]*')) 

或者填充数组后可以修剪数组值:

 $ ids=($(grep -Eo '^#[0-9]+\.something' file.txt)) $ echo ${ids[@]} #1.something #2.something #3.something $ for key in "${!ids[@]}"; do ids[key]="${ids[key]%.*}"; done $ echo ${ids[@]} #1 #2 #3