如何使用sed删除每行中从ANARCI到首个竖线|的内容?
sed 文本替换问题解决方案
你之前写的命令不生效有两个核心原因:
.*是贪婪匹配规则,会直接匹配到整行最后一个竖线,而非你需要的第一个竖线- 你对
|加了转义符变成\|,在sed默认的基础正则表达式语法中,\|代表“或”逻辑运算符,你写的表达式相当于匹配「ANARCI开头的任意内容」或者「空值」,完全不符合替换需求
正确替换命令
直接使用排除匹配规则匹配到第一个竖线即可,命令如下:
sed 's/ANARCI[^|]*|//' 待处理的文件名
命令说明
[^|]*代表匹配所有非|的字符,会自动停在第一个出现的|位置- 不需要加
g参数,每行仅需要替换1次
直接修改原文件的写法
如果需要直接修改原文件,不需要输出到终端:
- 多数Linux系统默认的GNU sed:
sed -i 's/ANARCI[^|]*|//' 待处理的文件名
- macOS自带sed:
sed -i '' 's/ANARCI[^|]*|//' 待处理的文件名
内容的提问来源于stack exchange,提问作者Johnny Tam
相关产品推荐
相关产品推荐

