edでedスクリプトを実行する

edでedスクリプトを実行する

edファイルで、スペース、末尾のスペース、空白行などをクリーンアップする一連の正規表現を含む "cleanup"というスクリプトファイルを作成しました。私は次のように実行します:

ed [name-of-file] < [name-of-script]

時々、現在edで編集中のファイルにスクリプトを実行したい場合があります。これを行うために必要な構文はわかりません。

以下はスクリプトの例です。

g/^  */s///
# Remove blank spaces at the beginning of a line
g/  *$/s///
# Remove trailing whitespace at end of line
g/   */s// /g
# Remove additional spaces between words
g/^$/d
# delete blank lines
g/\(‘‘\|’’\)/s//"/g
# Remove curly braces
g/\(“\|”\)/s//"/g
g/\(‘\|’\)/s//'/g
# idem
,p
Q

答え1

あなたは使用することができます

e !ed -s % <script

変更された編集バッファを出力してスクリプトが終了する場合、つまりスクリプトがおよび,pで終わる場合ですQ。これは現在の編集バッファの内容をafterコマンドの出力に置き換えます!。コマンドは%現在のファイル名に自動的に置き換えられます(このコマンドは現在のファイル名を変更しません)。

w作成した人がed以前に編集した内容を表示できるように、この作業を最初に実行することを忘れないでください。

(これはサンプルスクリプトには適用されないようですが...)スクリプトがファイルを内部で編集し、最後にファイルがディスクに再保存される場合は、次のようにします。

!ed -s % <script
e

これにより、edシェルでコマンドが実行され、現在の編集バッファが更新されたファイルの内容に置き換えられます。もう一度、まず忘れないでくださいw


さらなる説明:

このe !somecommandコマンドは現在の編集バッファを削除し、それをの出力に置き換えますsomecommand

これは、編集スクリプトが標準出力の最終結果を出力し、その出力を編集する場合、これがe !ed -s % <script適切であることを意味します。script

追加の引数なしで、このeコマンドは現在のファイルを再度開き、編集バッファをファイルの内容に置き換えます。この前に!somecommandwhereがある場合somecommand 現在のファイルの変更、これらの変更を編集セッションにマージする方法は次のとおりです。

これは、編集スクリプトが変更された文書を標準出力に書き込むのではなく、同じ名前で再保存する場合は!ed -s % <script後者を使用する必要があることを意味します。escript

関連情報