如何删除仅以+或-开头且后续仅含空格的行?
高效处理大文件:精准删除指定格式空行
问题场景
现有文件内容如下:
+ - + <>cow apple</> - apple + ball + + - - + - - + + ! - - + + $ + ** + * + = + # - ? - ◊ + ◊◊ - -
需要删除**仅以+或-开头,后续仅包含空格(或无字符,只有开头符号)**的行,预期输出:
+ <>cow apple</> - apple + ball + + - - + - - + + ! + $ + ** + * + = + # - ? - ◊ + ◊◊
当前使用命令 sed ‘/^[^[:alnum:]]* $/d’ 能得到预期结果,但该正则匹配范围过宽(会匹配所有非字母数字开头的空行),且处理大文件时效率有优化空间。
优化方案
使用更精准、高效的sed命令:
sed '/^[+-][[:space:]]*$/d' filename
方案说明
- 正则
^[+-][[:space:]]*$精准锁定目标行:^匹配行首[+-]仅匹配+或-开头[[:space:]]*匹配任意数量的空白字符(包括空格、制表符,也允许0个空白字符,即只有+或-的行)$匹配行尾
- 相比原命令,该正则仅匹配我们需要删除的行模式,不会误删其他格式的行(比如
@这类非+-开头的空行),同时因为匹配逻辑更简洁,处理大文件时sed的匹配速度更快,性能更高效。
内容的提问来源于stack exchange,提问作者Sharad Shrestha
相关产品推荐
相关产品推荐

