如何提取 grep 并切割成 bash 数组
how to extract grep and cut into a bash array
我试过了:
这里是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...)
但是它打印的所有内容都不像换行符,因为每个这样的 id 都找到了我错过了什么?
您的 grep
和 cut
应该可以正常工作,但您可以使用 awk
并将 2 个命令缩减为一个:
while read -r id;
echo "$id"
done < <(awk -F '\.' '/something/{print }' file.txt)
填充数组:
ids=()
while read -r id;
ids+=( "$id" )
done < <(awk -F '\.' '/something/{print }' 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]*'))
或者您可以 trim 填充数组后的数组值:
$ 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
我试过了:
这里是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...)
但是它打印的所有内容都不像换行符,因为每个这样的 id 都找到了我错过了什么?
您的 grep
和 cut
应该可以正常工作,但您可以使用 awk
并将 2 个命令缩减为一个:
while read -r id;
echo "$id"
done < <(awk -F '\.' '/something/{print }' file.txt)
填充数组:
ids=()
while read -r id;
ids+=( "$id" )
done < <(awk -F '\.' '/something/{print }' 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]*'))
或者您可以 trim 填充数组后的数组值:
$ 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