Unix中找到特定文本模式后截断文件剩余内容的方法
解决方法
用 sed 处理(最常用)
默认sed是逐行处理的,所以你之前的.*只能匹配到行尾。要截断到文件末尾,试试这几种写法:
1. 直接删除"Check list"所在行及之后的所有内容
sed '/Check list/,$d' your_html_file.html
/Check list/:定位到包含该字符串的行,$d:删掉从该行到最后一行的所有内容
2. 保留"Check list"所在行,只删后面的内容
如果想留下目标行,用这个更高效的写法:
sed -n '1,/Check list/p' your_html_file.html
-n:只打印指定范围的内容1,/Check list/p:输出从第一行到包含"Check list"的行的全部内容,自动截断后续部分
用 awk 处理
awk写起来更简洁,两种场景:
1. 不保留"Check list"所在行
awk '/Check list/{exit}1' your_html_file.html
- 碰到含"Check list"的行就直接退出,之前的所有行会被打印出来
2. 保留"Check list"所在行
awk '1;/Check list/{exit}' your_html_file.html
- 先打印当前行,再判断是否退出,所以目标行会被保留
一步完成下载+截断+提取数据
不用先存文件,直接把wget的输出通过管道传给处理命令,再做grep:
wget -qO- "http://你的目标网址" | sed -n '1,/Check list/p' | grep "你要提取的模式"
内容的提问来源于stack exchange,提问作者shanuj garg
相关产品推荐
相关产品推荐

