如何用Awk命令排除文件中指定起止标记间的内容?
用awk排除指定段落的解决方案
你只需要调整原有awk命令中标记变量f的判断逻辑和执行顺序,就能实现反向操作,以下分两种场景给出命令:
场景1:排除整个段落(包括# Start U23 Team和# End U23 Team两行)
执行这条命令即可:
/# Start U23 Team/{f=1} !f; /# End U23 Team/{f=0}
逻辑说明:
- 初始状态下标记
f为0(默认值),此时!f为真,正常打印所有行 - 当匹配到
# Start U23 Team时,把f设为1,后续行的!f为假,停止打印 - 当匹配到
# End U23 Team时,把f设为0,后续行恢复正常打印 - 由于
# Start U23 Team行触发f=1后才判断!f,# End U23 Team行先判断!f(此时f还是1)再设为0,所以这两行都不会被打印
场景2:保留起止行,仅排除中间的球员内容
如果你想留下# Start U23 Team和# End U23 Team,只去掉中间的段落内容,用这条命令:
/# End U23 Team/{f=0} !f; /# Start U23 Team/{f=1}
逻辑说明:
- 初始
f=0,正常打印所有行 - 遇到
# Start U23 Team时,先执行!f(此时f=0,所以打印该行),再把f设为1,后续行停止打印 - 遇到
# End U23 Team时,先把f设为0,再执行!f(此时f=0,所以打印该行),后续行恢复打印
内容的提问来源于stack exchange,提问作者Liso
相关产品推荐
相关产品推荐

