Newlines
在 ed 腳本中添加將長行分成較短行的命令
我的
ed
文件中經常有很長的行,我想將它們分成最大長度的單獨行。我發現這個命令可以實現這一點:fold -s -w80 file
我也可以在 ed 中應用此命令,如下所示:
!fold -s -w80 %
但是,當我將此命令添加到我的 ed 腳本時,該腳本包含以下幾行,
g/\(‘‘\|’’\)/s//"/g g/\(“\|”\)/s//"/g g/\(‘\|’\)/s//'/g g/\*/s///g g/^#.*: /s///g g/^ */s/// g/ *$/s/// g/ */s// /g e !uniq % e !fold -s -w80 % # g/^$/d w Q
我得到一個錯誤。我想知道錯誤的原因以及規避它的方法。
摘要:錯誤取決於
#
在非 GNU 中用作註釋字元ed
。- 使用 GNU 在不先保存緩衝區的情況下編輯命令的輸出
ed
。還:
H
是一個非常有用的命令,可以放在編輯腳本的頂部。使用 GNU
ed
,當我在一個簡單的文件上嘗試它時,您的編輯腳本將毫無問題地執行hello world
。在我的 OpenBSD 系統上使用本機ed
,我收到一個錯誤,?
.將
H
命令添加到編輯腳本的頂部,我們會啟用更詳細的錯誤。加上這個,OpenBSDed
抱怨編輯腳本中的第 12 行,說unknown command
.第 12 行,當
H
已添加為第 1 行時,是命令# g/^$/d
#
in 不是標準命令,ed
但 GNUed
似乎將此視為註釋。BSDed
不會:$ printf '%s\n' H '# hello' Q | ed -s ? script, line 2: unknown command
$ printf '%s\n' H '# hello' Q | ged -s
(無輸出)
因此,錯誤的一個原因可能是您使用了一個
ed
不理解#
為有效命令的命令。為了避免它,不要在你的編輯腳本中使用這個命令。標準
ed
沒有辦法忽略給它的命令(沒有“評論命令”)。您可能會收到錯誤的另一個原因是您嘗試在緩衝區已編輯但未保存時使用
e !somecommand
GNU 。ed
同樣,
H
在編輯腳本的頂部添加了一個,但現在有一個由之前的一些命令修改的文件e !uniq %
:$ ged -s file <script ? script, line 10: Warning: buffer modified
使用該
-s
選項時,BSDed
不會e !somecommand
在緩衝區中未保存的更改執行之前發出警告。如果您編輯 and 的輸出
uniq
,fold
您必須確保首先將編輯緩衝區寫入磁碟!您需要這樣做,因為兩者都fold
作用uniq
於磁碟上的文件。所以在他們之前插入
w
:g/\(‘‘\|’’\)/s//"/g g/\(“\|”\)/s//"/g g/\(‘\|’\)/s//'/g g/\*/s///g g/^#.*: /s///g g/^ */s/// g/ *$/s/// g/ */s// /g w e !uniq % w e !fold -s -w80 % w Q
你也可以結合
uniq
併fold
進入w e ! uniq % | fold -s -w80
另請注意,BSD 和 GNU 都
ed
支持非標準wq
來代替w
後面的q
orQ
。