Shell脚本提取文件每行中的Diagram ID并保存至新文件
Shell脚本提取文件每行中的Diagram ID并保存至新文件
别担心,刚接触Shell脚本确实容易有点懵,我来帮你快速搞定这个提取Diagram ID的需求!其实不用写复杂的循环也能轻松实现,给你几种简单好用的方法:
方法一:用grep快速提取(推荐新手用,简洁高效)
grep是处理文本匹配的利器,一行命令就能搞定:
grep -oP 'DiaMatch\(\K\d+' 你的输入文件名.txt > 保存结果的文件名.txt
我给你拆解一下每个参数的作用:
-o:只输出匹配到的内容,而不是整行-P:启用Perl风格的正则表达式,方便我们精准匹配DiaMatch\(\K\d+:这个正则的意思是,找到DiaMatch(之后的所有数字(\d+),\K会忽略掉前面的DiaMatch(,只保留后面的数字部分
方法二:用sed实现提取
sed是流编辑器,也能轻松完成替换提取:
sed -n 's/.*DiaMatch(\([0-9]*\)).*/\1/p' 你的输入文件名.txt > 保存结果的文件名.txt
解释一下:
-n:不让sed默认输出每一行,只输出我们处理后的内容s/.*DiaMatch(\([0-9]*\)).*/\1/p:这是替换命令,把整行内容替换成DiaMatch()括号里的数字(\([0-9]*\)是捕获括号里的数字,\1引用这个捕获的内容),最后p是打印替换后的结果
如果你想继续用自己写的while循环
要是你更习惯用while read的方式,也可以把提取逻辑放到循环里:
while read line; do # 对每一行提取ID并输出 echo "$line" | grep -oP 'DiaMatch\(\K\d+' done < 你的输入文件名.txt > 保存结果的文件名.txt
不管用哪种方法,最终都会把所有提取到的ID(比如13、14、15这些)逐行保存到你指定的结果文件里,其他无关内容都会被排除掉~记得把命令里的文件名换成你实际的文件名哦!
备注:内容来源于stack exchange,提问作者Tanmoy Pati
相关产品推荐
相关产品推荐

