Text-Processing

如何使用vi在文本文件中每一行的開頭添加特定字元

  • July 29, 2022

假設我們有一個包含以下條目的文本文件。

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 。#

引用自:https://unix.stackexchange.com/questions/711674