如何从animals.sh脚本中提取指定动物(cat/dog)对应的SERIAL变量值
提取脚本中对应动物的SERIAL值
这里有几个实用的命令组合,能帮你快速从animals.sh里精准提取指定动物的SERIAL数值,不用手动清理多余输出:
方法1:grep + cut 组合(最简洁)
这个方法步骤清晰,容易理解:
grep -A 3 'dog)' animals.sh | grep SERIAL | cut -d'=' -f2
- 第一步
grep -A 3 'dog)' animals.sh:找到dog)所在行,并输出后续3行内容; - 第二步
grep SERIAL:从结果里过滤出包含SERIAL的行; - 第三步
cut -d'=' -f2:以=为分隔符,提取等号后面的第二部分内容,也就是你要的数值。
如果要提取cat的SERIAL,只需要把命令里的dog换成cat即可。
方法2:grep + sed 组合
和上面思路类似,用sed替换掉多余前缀:
grep -A 3 'dog)' animals.sh | grep SERIAL | sed 's/^.*SERIAL=//'
这里sed 's/^.*SERIAL=//'的作用是把从行开头到SERIAL=的所有内容替换为空,直接得到数值。
方法3:awk 单命令处理(更高效)
如果不想用多个管道,awk可以一次性完成所有逻辑,效率更高:
awk -v target_animal="dog" '$0 ~ "^ " target_animal ")$" {found=1; next} found && /SERIAL=/{sub(/SERIAL=/, "", $0); print; exit}' animals.sh
-v target_animal="dog":把要查找的动物名作为变量传递给awk;$0 ~ "^ " target_animal ")$":匹配对应动物的行(注意脚本里是4个空格开头);- 匹配到后设置
found=1并跳转到下一行; - 当
found为1时,找到包含SERIAL的行,替换掉前缀后打印,然后直接退出(避免处理多余内容)。
内容的提问来源于stack exchange,提问作者Lagot
相关产品推荐
相关产品推荐

