Text-Processing
如何使用vi在文本文件中每一行的開頭添加特定字元
假設我們有一個包含以下條目的文本文件。
my name is XYZ I study at ABC school
如果使用vi模式我想在每行前面添加“#”
:%s/^/#/g
問題是“#”也會插入文本文件的空白行,但我只想在非空行前面添加“#”。
嘗試
:%s/^./#&/
在哪裡
:
命令模式%
所有線路s/LHS/RHS/
用右手邊代替左手邊^
如果行開始.
一個字元#
&
我們發現了什麼
我將假設您希望避免
#
在“空白”行的開頭添加,即可能為空或僅包含空格或製表符的行。
#
在包含非空白字元的每一行的開頭插入::g/[^[:blank:]]/ s/^/#/
這使用
g
從編輯器繼承的 (“global”) 命令ed
在與正則表達式匹配的每一行上應用替換[^[:blank:]]
。此表達式匹配至少包含一個非空白字元的行。“空白字元”(在 POSIX 語言環境中)是製表符或空格。具有相同效果的命令:
:v/^[[:blank:]]*$/ s/^/#/
這用於
v
代替對與表達式不g
匹配的每一行應用相同的替換,即為空或僅包含空格。該命令也繼承自編輯器。^[[:blank:]]*$``v``ed
您是否還想避免添加
#
到已經以 開頭的行#
,然後將上述命令中的替換更改為s/^#\?/#/
. 這將#
在非空行上插入 a,但如果有,則在開頭替換a 。#