最近遇到了些奇奇怪怪的有关结构化文本文档(例如xml)的处理需求,感觉用Shell操作最方便。在此稍微整理一下。
1. 需求:从输入文本文件中找到匹配字符串,并删除其所在行以及之后的N行。
解:用sed
# 直接替换原文件(有风险)
sed -i '/匹配字符串/I, +N行 d' 输入文件名
# 不替换原文件(安全适合老年人)
sed '/匹配字符串/I, +N行 d' 输入文件名 > 输出文件名
2. 需求:从输入文本文件中找到匹配字符串,并删除其所在行以及之前的N行。
解:用tac掉转文本两次,中间用sed。
tac 输入文件名 |sed '/匹配字符串/I, +N行 d' |tac > 输出文件
3. 需求:从输入文本文件中找到匹配字符串,并删除其所在行以及之前的M行与之后的N行。
解:用两个grep抓出match的和match不上的即可。
grep -v "$(grep -B M行 -A N行 '匹配字符串' 输入文件名)" 输入文件名 > 输出文件名
之前写了个脚本一行一行处理。年纪大了,不适合整太花里胡哨的,怎么简单怎么来吧。