在 vi 編輯器中的替換中使用插入符號 (^)
我正在使用 CentOS,並且正在編輯器中閱讀替換命令
s///
, 。vi
我想測試我看到的一些例子::%s/old/new/g Substitutes old with new throughout the file :.,$s/old/new/g Substitutes old with new from the current cursor position to the end of the file
上面的範例對我來說按預期工作,但包含插入符號 (
^
) 的以下範例不起作用::^,.s/old/new/g Substitutes old with new from the beginning of the file to the current cursor position
我試過了,但它沒有用,所以插入符號不起作用還是我輸入的命令不正確?
在
vi
編輯器中,以及在兩者中ex
和ed
(在 BSD 系統上可以找到),^
地址是前一行。這意味著該命令^d
將刪除前一行,^m.
將這一行與前一行交換,並將替換與前一行和這一行^,.s/old/new/g
匹配的所有字元串。old``new
編輯器是對原始和編輯器的
vim
擴展重新實現,通常安裝在 Linux 系統上,名稱為 、和,沒有這種定址上一行的方式,並且將響應“ E492:不是編輯命令”如果您嘗試使用它。您可以使用或代替它:vi``ex``vim``vi``ex``-``-1
-,.s/old/new/g
使用
-
或-1
代替^
也適用於ed
非GNU 系統ex
。vi
POSIX 標準與編輯器有關的內容如下:
ed
從歷史上看,
ed
接受^
字元作為地址,在這種情況下,它與<hyphen-minus>
字元相同。POSIX.1-2017 不要求或禁止這種行為。和編輯器有類似的措辭(是 “行編輯器模式”):
vi``ex``ex``vi
從歷史上看,
ex
並vi
接受^
字元作為地址和命令的標誌偏移量。在這兩種情況下,它都與-
角色相同。POSIX.1-2017 不要求或禁止這種行為。請注意,您似乎引用的文本表示
^,.
從文件頂部到目前行的所有行。這是不正確的。它僅針對前一行和目前行,並且僅在vi
(andex
和ed
) 的“歷史準確”實現中這樣做。要定址從編輯緩衝區開始到目前行的所有行,請使用1,.
.-instead
^
-of-1
錯字可能來自於這樣的想法:“因為$
是正則表達式中的行尾錨點,也是編輯緩衝區中最後一行的地址^
,, 是行首錨點因此,正則表達式必須(通過對稱性)是編輯緩衝區的第一行”。只是提供另一個瑣事:該
^
地址也不能在ed
編輯器的 GNU 實現中使用。與 的任何其他實現一樣ed
,-
或-1
仍可用作替代方案。