如何使用Bash提取文本文件中两个位置间的内容?
提取文件中两个标记间内容的实用方案
方法一:用sed快速提取
这是最直接的方式,适配大多数场景:
sed -n '/Location1/,/Location2/p' filename
-n参数让sed只输出我们指定的行,避免冗余内容/Location1/,/Location2/定义提取范围:从匹配到Location1的行开始,到匹配到Location2的行结束p表示打印这个范围内的所有行
如果Location2可能不存在,需要提取到文件末尾,用这个变种命令:
sed -n '/Location1/,$p' filename
方法二:用awk实现更灵活的提取
如果需要调整是否包含标记行本身,awk的可定制性更强:
awk '/Location1/{flag=1} flag; /Location2/{flag=0}' filename
- 匹配到
Location1时,设置标记flag=1,开始打印后续行 - 匹配到
Location2时,设置flag=0,停止打印 - 这个命令会同时包含
Location1和Location2所在的行
如果不想包含Location1行:
awk 'flag; /Location1/{flag=1}; /Location2/{flag=0}' filename
如果不想包含Location2行:
awk '/Location1/{flag=1}; flag && !/Location2/; /Location2/{flag=0}' filename
这两个工具都是系统自带的,无需额外安装,不管两个标记在文件开头、中间,还是行数不固定的情况都能完美处理。
内容的提问来源于stack exchange,提问作者Jason Aruni
相关产品推荐
相关产品推荐

