如何删除竖线|前为8位数字、后首个字段为3位数字的整行?
实现方案
Linux/macOS 命令行方案
方法1:使用grep(最简单)
直接匹配需要保留的行即可,命令如下:grep -E '^[0-9]{8}\|[0-9]{2}\|' 原文件名 > 结果文件名
-E开启扩展正则表达式支持- 正则规则
^[0-9]{8}\|[0-9]{2}\|表示匹配行首为8位数字、后跟竖线、再跟2位数字加竖线的行,刚好排除首个字段为3位数字的行
方法2:使用awk(适合后续需要处理字段的场景)
awk -F '|' 'length($2)==2' 原文件名 > 结果文件名
-F '|'指定竖线为字段分隔符length($2)==2筛选第二个字段(即8位数字后首个竖线跟随的字段)长度为2的行,默认直接打印符合条件的行
方法3:使用sed
sed -n '/^[0-9]\{8\}|[0-9]\{2\}|/p' 原文件名 > 结果文件名
-n关闭默认打印逻辑- 匹配到符合规则的行后用
p指令输出
Windows 方案
PowerShell命令
Get-Content 原文件名 | Where-Object { $_ -match '^\d{8}\|\d{2}\|' } | Out-File 结果文件名 -Encoding utf8
- 逐行读取文件内容匹配规则,输出时指定UTF8编码避免乱码
跨平台Python脚本方案
如果需要集成到业务代码中可以使用该方案:
import re input_path = "你的输入文件路径.txt" output_path = "你的输出文件路径.txt" # 匹配需要保留的行的正则 pattern = re.compile(r'^\d{8}\|\d{2}\|') with open(input_path, 'r', encoding='utf-8') as f_in, open(output_path, 'w', encoding='utf-8') as f_out: for line in f_in: if pattern.match(line): f_out.write(line)
提示:如果需要直接修改原文件,操作前建议先备份原文件避免数据丢失。
内容的提问来源于stack exchange,提问作者Firsthen
相关产品推荐
相关产品推荐

