如何使用grep仅提取前2个匹配结果并按指定格式输出
如何使用grep仅提取前2个匹配结果并按指定格式输出
嘿,这个需求其实很容易实现,咱们把几个基础命令组合起来就能搞定,不用写复杂的脚本~
首先,你原来的grep命令可以加上-m2参数限制只输出前2个匹配项,先把范围缩小到你要的前两条结果。接下来需要去掉每条结果里的空格,再把它们用连字符-拼接成一行。这里给你两种实用的方法:
方法一:grep + tr + paste 组合
直接用管道把三个命令串起来就行:
grep -m2 -E '^[ 0-9]{6}$' your_file | tr -d ' ' | paste -sd '-' -
grep -m2 ...:只提取前2个符合正则的行tr -d ' ':删除每行里的所有空格paste -sd '-' -:把处理后的两行用-连接成单行
方法二:用awk一步到位(更高效)
如果文件比较大,awk可以在匹配到第2个结果后直接退出,不用遍历整个文件,效率更高:
awk '/^[ 0-9]{6}$/ { gsub(/ /, "", $0) # 去掉当前行的空格 if (count == 0) { res = $0 } else { res = res "-" $0 } count++ if (count == 2) { print res exit # 拿到结果就退出,不用继续处理 } }' your_file
拿你给出的示例输入测试的话,两种方法都会输出71051-17293,完全符合你的要求~
备注:内容来源于stack exchange,提问作者Jean-gabriel Lopez
相关产品推荐
相关产品推荐

