ドキュメントに非常に長い行があることが多く、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
。- まず、バッファを保存せずにGNU編集コマンドの出力を使用してください
ed
。
返品:
H
編集スクリプトの上部に配置できる非常に便利なコマンドです。
GNUを使用すると、ed
内容が1行だけある単純なファイルに編集スクリプトを適用すると、問題なく実行されますhello world
。私のOpenBSDシステムでこのコンピュータを使用するとed
エラーが発生します?
。
H
このコマンドを編集スクリプトの上部に追加すると、より詳細なエラーが発生します。これを追加した後、OpenBSDはed
編集スクリプトの12行について次のように文句を言いましたunknown command
。
12行目(H
1行目に追加された場合)はコマンドです。
# 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 !somecommand
。ed
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
置換または 。w
q
Q