sed脚本`0,/ACCOUNT/! {0,/^ACCOUNT/d}`功能解析及执行异常排查
解读sed脚本
sed -i "0,/ACCOUNT/! {0,/^ACCOUNT/d}" file.txt的功能与异常原因 实际功能
这个sed脚本逻辑混乱,实际不会对文件做任何修改。拆解执行逻辑:
0,/ACCOUNT/!:仅对第一个包含ACCOUNT的行之后的所有行执行大括号内的命令。- 大括号内的
0,/^ACCOUNT/d:试图删除从文件开头到第一个以ACCOUNT开头的行,但这些行已经在前面被处理过(属于0,/ACCOUNT/的范围,不会进入这个块),后续行根本不在0,/^ACCOUNT/的地址范围内,删除命令完全不生效。
异常原因:表头行未被删除的根源
你预期脚本删除^ACCOUNT的表头行,但表头行本身就是第一个匹配/ACCOUNT/的行(因为它以ACCOUNT开头),属于0,/ACCOUNT/的范围,被!排除在外,根本不会触发任何删除操作。
正确实现删除表头行的命令
如果要删除所有以ACCOUNT开头的行:
sed -i '/^ACCOUNT/d' file.txt
如果仅删除第一行(确认表头是第一行)且该行以ACCOUNT开头:
sed -i '1{/^ACCOUNT/d}' file.txt
内容的提问来源于stack exchange,提问作者emcee
相关产品推荐
相关产品推荐

