ed スクリプトに、長い行を短い行に分割するコマンドを追加します。

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

エラーが発生します。エラーの原因と解決方法を知りたいです。

ベストアンサー1

要約:エラーは次のように異なります。

  1. #GNU以外の言語ではコメント文字として使用されますed
  2. まず、バッファを保存せずにGNU編集コマンドの出力を使用してくださいed

返品:

  • H編集スクリプトの上部に配置できる非常に便利なコマンドです。

GNUを使用すると、ed内容が1行だけある単純なファイルに編集スクリプトを適用すると、問題なく実行されますhello world。私のOpenBSDシステムでこのコンピュータを使用するとedエラーが発生します?

Hこのコマンドを編集スクリプトの上部に追加すると、より詳細なエラーが発生します。これを追加した後、OpenBSDはed編集スクリプトの12行について次のように文句を言いましたunknown command

12行目(H1行目に追加された場合)はコマンドです。

# g/^$/d

inは#標準edコマンドではありませんが、GNUはedそれをコメントとして扱うようです。 BSDはed次のことを行いません。

$ printf '%s\n' H '# hello' Q | ed -s
?
script, line 2: unknown command
$ printf '%s\n' H '# hello' Q | ged -s

(出力なし)

だから一つエラーの原因は、使用したコマンドが有効なコマンドとしてed認識されないためです。#これを防ぐために、編集スクリプトでこのコマンドを使用しないでください。

標準には、ed指定されたコマンドを無視する方法はありません(「コメントコマンド」はありません)。

エラーが発生する可能性があるもう1つの理由は、バッファを編集したが保存していない状態でGNUを使用しようとするためですe !somecommanded

Hもう一度編集スクリプトの上に1つを追加しましたが、今は以前のコマンドのいくつかを使用して変更された文書を使用しますe !uniq %

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

このオプションを使用すると、BSDは-sバッファに保存されていない変更を実行するed前に警告を発行しません。e !somecommand

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置換または 。wqQ

おすすめ記事