如何在shell中使用sed提取文本内1:与2:标识模式之间的内容
文本提取sed实现方案
适用场景:提取所有1:与紧接着的2:之间的文本内容
场景1:1:和2:分别位于不同行(和你提供的示例结构一致)
使用如下命令:
sed -n '/1:/,/2:/{s/.*1: *//; s/ *2:.*//; p}' 目标文件路径 | grep -v '^$'
命令说明:
-n参数关闭sed默认输出,仅输出我们指定的内容/1:/,/2:/匹配从包含1:的行到包含2:的行的全部内容范围s/.*1: *//把每一行里1:及前面的内容全部删除s/ *2:.*//把每一行里2:及后面的内容全部删除p打印处理后的行- 最后管道接
grep -v '^$'过滤掉处理后产生的空行 - 如果是从管道输入内容,把命令里的目标文件路径替换为
-即可
拿你给出的示例运行该命令,输出结果为:
通常长有浓密柔软皮毛、无吼叫能力的猫科哺乳动物:家猫;野猫 [syn: {cat}, {true cat}]
用九尾鞭抽打
场景2:1:和2:位于同一行
使用如下单行替换命令即可:
sed 's/.*1: *\(.*\) *2:.*/\1/' 目标文件路径
命令说明:通过正则捕获组直接提取1:和2:中间的内容,输出捕获到的分组内容即可。
内容的提问来源于stack exchange,提问作者user17083646
相关产品推荐
相关产品推荐

