Newlines

在 ed 腳本中添加將長行分成較短行的命令

  • August 26, 2021

我的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

我得到一個錯誤。我想知道錯誤的原因以及規避它的方法。

摘要:錯誤取決於

  1. #在非 GNU 中用作註釋字元ed
  2. 使用 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 !somecommandGNU 。ed

同樣,H在編輯腳本的頂部添加了一個,但現在有一個由之前的一些命令修改的文件e !uniq %

$ ged -s file <script
?
script, line 10: Warning: buffer modified

使用該-s選項時,BSDed不會e !somecommand在緩衝區中未保存的更改執行之前發出警告。

如果您編輯 and 的輸出uniqfold您必須確保首先將編輯緩衝區寫入磁碟!您需要這樣做,因為兩者都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

你也可以結合uniqfold進入

w
e ! uniq % | fold -s -w80

另請注意,BSD 和 GNU 都ed支持非標準wq來代替w後面的qor Q

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