正则表达式在Grep中工作但不是vim

时间:2018-01-07 19:32:00

标签: regex linux vim grep

我有一个这种格式的文件,problem.txt:

StarBonds

↯ | 356 Positions | Gain: H$59,834,200 (15.26%)
Security    Shares  &   Paid    Current     Today   ▲   Value   Gain / Loss     ±
AANDE   20,000  !|!     H$26.35     H$29.84     H$0.08      H$596,800   H$69,800    13%
ABASS   20,000  !|!     H$51.68     H$51.29     -H$0.27         H$1,025,800     -H$7,800    -0%
ABRAG   20,000  !|!     H$39.65     H$44.98     -H$0.13     ▼   H$899,600   H$106,600   13%
ABRES   20,000  !|!     H$49.62     H$45.26     -H$0.40         H$1,079,600     H$87,200    8%

我想删除所有不以2-5字符,所有大写字母标识符开头的行。

在使用grep的命令行中,它只显示那些行而不是“垃圾行”(前面示例顶部的前四行)。即我想要的结果。  $ grep'^ [A-Z0-9] [A-Z0-9] +'problem.txt

AANDE   20,000  !|!     H$26.35     H$29.84     H$0.08      H$596,800   H$69,800    13%     
ABASS   20,000  !|!     H$51.68     H$51.29     -H$0.27         H$1,025,800     -H$7,800    -0%     
ABRAG   20,000  !|!     H$39.65     H$44.98     -H$0.13     ▼   H$899,600   H$106,600   13%     
ABRES   20,000  !|!     H$49.62     H$45.26     -H$0.40         H$1,079,600     H$87,200    8%

在vim中,使用相同的正则表达式,它找不到它,即使我删除了行标记的开头:

:%s/^[A-Z0-9][A-Z0-9]+
%s/E486: Pattern not found: [A-Z0-9][A-Z0-9]+  

当我尝试删除数字时,我得到同样的错误:

E486: Pattern not found: [A-Z][A-Z]+ 

一旦我可以让vim找到正则表达式,目标是将%s //更改为%g // d。

在Debian Jessie上使用vim,grep来自同样的。

Vim是默认安装,我不确定是否需要设置标志,其他搜索过去不是问题。

1 个答案:

答案 0 :(得分:7)

在vim +中必须进行转义,因此您可以使用以下命令保留指定的行:

:%g!/^[A-Z0-9][A-Z0-9]\+/d

如果您只想匹配以2到5个字符序列开头的行,您可以使用:

:%g!/^[A-Z0-9]\{2,5\}/d