如果行以数字开头,则用_替换空格或-s

时间:2017-07-21 21:45:46

标签: regex vim replace

我有一个文本文件如下:

#1xx Informational responses
100=Continue
101=Switching Protocols
102=Processing
#2xx Success
200=OK
201=Created
202=Accepted
203=Non-Authoritative Information
204=No Content
205=Reset Content
206=Partial Content
207=Multi-Status
208=Already Reported
226=IM Used   

我想要做的是将其转换为以下内容:

#1xx_Informational responses
100=Continue
101=Switching_Protocols
102=Processing
#2xx_Success
200=OK
201=Created
202=Accepted
203=Non_Authoritative_Information
204=No_Content
205=Reset_Content
206=Partial_Content
207=Multi_Status
208=Already_Reported
226=IM_Used

我可以使用:

:%s/[ \|-]/_/g  

但它无条件地在所有行中更改空格或_和_,包括第一行:

#1xx_Informational_responses

我不希望这样。相反,我想要实现的是只有当一行以数字开头时才用_替换空格和-s。对于所有其他行,我不想执行替换操作。

有没有办法“有条件地”执行更换操作?我不想处理行号,行号可能会改变。我想要关于线的内容的答案(从这种情况的数字开始),而不是行号。

提前致谢。

2 个答案:

答案 0 :(得分:6)

<data 
android:scheme="https"
android:host="example.com"/>

:g/^\d/s/[ -]/_/g 命令在给定正则表达式匹配的每一行上执行命令。

(顺便说一句,您的正则表达式:global会匹配一个空格或[ \|-]\|的字符。)

答案 1 :(得分:0)

尝试通过sed传递它,这允许选择要在

上操作的行
:%!sed '/^[0-9]/s/-/_/g'

此行选择以数字开头的所有行,然后,它将所有(从选项g-字符替换为_