Linux Bash使用grep提取指定KNR单词及脚本运行方法
操作方案
提取指定格式KNR别名
你要匹配的目标结构为KNR+数字段+_THING、且末尾紧跟空格,直接用grep匹配提取即可:
- 如果你已经生成了Test.txt文件,执行以下命令直接提取所有符合规则的单词,结果会自动去掉末尾附带的空格:
grep -oP 'KNR[0-9]{17}_THING(?= )' Test.txt > KNR_result.txt
正则说明:
{17}对应你示例中KNR后的17位数字,如果实际数字长度有变化,直接修改大括号内的数值即可;如果数字长度不固定,把[0-9]{17}替换为[0-9]+即可匹配任意长度连续数字。(?= )是正向先行断言,仅匹配后面紧跟空格的目标串,不会把空格纳入输出结果,不需要额外处理末尾空格。
- 你之前过滤注释、空行的步骤可以和提取步骤合并,不需要单独生成Test.txt中间文件,处理大文件时效率更高:
# 合并写法,直接从原文件提取结果,跳过注释行、空行 grep -vE '^#|^$' 你的原文件路径 | grep -oP 'KNR[0-9]{17}_THING(?= )' > KNR_result.txt
如果你的运行环境grep不支持-P(Perl正则)参数(比如部分嵌入式系统的精简版grep),可以换全兼容写法,不需要依赖正则高级特性:
# 兼容写法,匹配后删除末尾空格即可 grep -vE '^#|^$' 你的原文件路径 | grep -o 'KNR[0-9]*_THING ' | tr -d ' ' > KNR_result.txt
Shell脚本运行注意事项
按以下规范写脚本即可正常运行:
- 脚本第一行必须指定解释器,写
#!/bin/bash即可,不要漏写 - 脚本中涉及的文件路径尽量写绝对路径,避免执行时工作目录变化导致找不到文件
- 脚本写完后执行
chmod +x 你的脚本文件名.sh添加执行权限,之后直接通过./你的脚本文件名.sh即可运行 - 如果需要把结果追加到已有文件而非覆盖,把命令里的
>替换成>>即可,和你之前的写入逻辑一致
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

