Shell 在特定行中获取特定字符并存储在变量中

Shell 在特定行中获取特定字符并存储在变量中,shell,awk,sed,grep,Shell,Awk,Sed,Grep,我有一个包含2行的文件,我想从每行中获取特定的字符并执行一些操作 我的档案: vm16_DSC_Instance_4 dsc-sig=172.16.17.14;Public=10.10.72.15;dsc-InterInstance=172.16.18.14;dsc-OAM=172.16.16.19 vm19_DSC_Instance_3 dsc-sig=172.16.17.15;Public=10.10.72.14;dsc-InterInstance=172.16.18.15;dsc-OAM=

我有一个包含2行的文件,我想从每行中获取特定的字符并执行一些操作

我的档案:

vm16_DSC_Instance_4 dsc-sig=172.16.17.14;Public=10.10.72.15;dsc-InterInstance=172.16.18.14;dsc-OAM=172.16.16.19
vm19_DSC_Instance_3 dsc-sig=172.16.17.15;Public=10.10.72.14;dsc-InterInstance=172.16.18.15;dsc-OAM=172.16.16.20
要求: 从下面的这个名字我想要像4和3这样的数字

vm16_DSC_Instance_4
vm19_DSC_Instance_3
当前: 在这里,我得到4和3在一杆。我想从1号线取4号做一些手术,然后从2号线取3号做一些手术。基本上我想根据计数器,它将得到第1行或第2行字符

cat /tmp/tmp_inst_tmp |awk '{print $1}' | cut -d'_' -f4
4
3

使用数组存储结果,并使用
sed
执行此简单任务

array=( $(sed -E 's/^[^[:blank:]]*_([[:digit:]]+)[[:blank:]]+.*$/\1/' file) )
for i in "${array[@]}"
do
# Do some task with "$i"
done


注意

使用数组存储结果,并使用
sed
执行此简单任务

array=( $(sed -E 's/^[^[:blank:]]*_([[:digit:]]+)[[:blank:]]+.*$/\1/' file) )
for i in "${array[@]}"
do
# Do some task with "$i"
done


请注意sed和阵列的另一种方法:

while read -r num; do
  arr+=("$num")
done < <(sed 's/^[^ ]*\([0-9][0-9]*\) .*/\1/' file)

echo ${arr[0]}
4
echo ${arr[1]}
3
读取时-r num;做
arr+=(“$num”)

完成<使用sed和阵列的另一种方法:

while read -r num; do
  arr+=("$num")
done < <(sed 's/^[^ ]*\([0-9][0-9]*\) .*/\1/' file)

echo ${arr[0]}
4
echo ${arr[1]}
3
读取时-r num;做
arr+=(“$num”)

完成但我想根据计数器,它会得到第一个或第二个号码。
?发布所需的输出更新了问题为什么不将结果存储在数组中并用于以后的处理?您也可以使用
grep-oP'\d+(?=)/tmp/tmp_inst_tmp
来获取数字无论是什么操作,您都应该在awk中搜索字符和该操作,而不是在shell中。如果你告诉我们你真正想做什么,我们可以告诉你如何正确地做。问题不清楚-
但我想根据计数器,它会得到第一个或第二个数字。
?发布所需的输出更新了问题为什么不将结果存储在数组中并用于以后的处理?您也可以使用
grep-oP'\d+(?=)/tmp/tmp_inst_tmp
来获取数字无论是什么操作,您都应该在awk中搜索字符和该操作,而不是在shell中。如果你告诉我们你真正想做什么,我们可以告诉你如何正确地做。因为在给定的输入中只有一个空格,
sed的s/*\([0-9]\)./\1/'文件
too@spasic它可以工作,但从非空格字符开始可能更安全一些。由于给定输入中只有一个空格,
sed的/*\([0-9]\).*/\1/'文件
可以工作too@spasic它可以工作,但从非空格字符开始可能会更安全一些。