求助:使用Unix Shell移除文件指定页眉及最后一行页脚
移除页眉和页脚的Shell脚本解决方案
直接用一行sed命令就能搞定需求,同时删除指定页眉块和最后一行页脚:
# GNU sed(Linux系统) sed -i '/BEGINHEADER/,/ENDHEADER/d; $d' TEST.txt # BSD sed(macOS系统)需给-i加空参数 sed -i '' '/BEGINHEADER/,/ENDHEADER/d; $d' TEST.txt
命令拆解:
/BEGINHEADER/,/ENDHEADER/d:匹配所有从包含BEGINHEADER的行到包含ENDHEADER的行(包括这两行),并直接删除它们$d:单独删除文件的最后一行-i:直接修改原文件(如果不想改动原文件,去掉-i,把结果重定向到新文件:sed '/BEGINHEADER/,/ENDHEADER/d; $d' TEST.txt > cleaned_TEST.txt)
示例验证
假设你的TEST.txt内容是:
BEGINHEADER
页眉辅助行1
页眉辅助行2
ENDHEADER
正文第一行
正文第二行
正文第三行
最后一行页脚
运行命令后,TEST.txt会变成:
正文第一行
正文第二行
正文第三行
如果偏好awk,也可以用这个逻辑更直观的命令:
awk ' /BEGINHEADER/ {skip=1} !skip {print} /ENDHEADER/ {skip=0} ' TEST.txt | head -n -1
awk的逻辑是:遇到BEGINHEADER就开启跳过标记,遇到ENDHEADER就关闭标记,期间跳过所有页眉行;最后用head -n -1删掉最后一行页脚。
内容的提问来源于stack exchange,提问作者Andrea Palazzo
相关产品推荐
相关产品推荐

