迷惑な繰り返しのVIMコマンドセットを適用する必要があるファイルがいくつかあります。これは、ファイルが必要なプロセスでサポートされていない一部の行を削除するための基本的なVIMコマンドです。
postgresdb.outというファイルがあるとしましょう。
このファイルでは、
vim ./postgresdb.out
その後、VIM内で
:%s/old/new/g
それから
:g/deletethis/d
続いて
:%s/\n\n//g
それからファイルを保存して一日を始めましょう
常に再入力するのではなく、このプロセスを実行するためにbashスクリプトを書くことができるかどうか疑問に思います。
答え1
代替
Vimの特別な機能が必須ではない場合は、Vimを使用する方が良いでしょう。非対話型ツールたとえばsed
、awk
またはPerl/Python/Ruby/あなたが好きなスクリプト言語がここにあります。
つまり、Vimを非対話式として使用できます。
自動配置モード
非常に単純なテキスト処理の場合(たとえば、拡張された「sed」や「awk」などのVimを使用する場合、またはコマンドの拡張正規表現を使用する場合:substitute
)、次のように使用します。辞書モード。
REM Windows
call vim -N -u NONE -n -i NONE -es -S "commands.ex" "filespec"
注:自動配置モード(:help -s-ex
)はWindowsコンソールを複雑にするため、cls
Vimを実行した後にクリーンアップする必要があるかもしれません。
# Unix
vim -T dumb --noplugin -n -i NONE -es -S "commands.ex" "filespec"
"commands.ex"
注:ファイルが存在しない場合、Vimは入力を待って停止します。ファイルが存在するかどうかを事前に確認することをお勧めします。あるいは、Vimはstdinからコマンドを読み取ることができます。 stdinから読み取られたテキストで新しいバッファを埋めることも、引数を使用している場合はstderrからコマンドを読み取ることもできます-
。
完全自動化
複数のウィンドウと Vim の真の自動化を含む高度な処理のために (ユーザーと対話するか、または Vim を実行中のままにしてユーザーが引き継ぐようにすることができます)、次を使用します。
vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"
使用されたパラメータを要約すると、次のようになります。
-T dumb Avoids errors in case the terminal detection goes wrong.
-N -u NONE Do not load vimrc and plugins, alternatively:
--noplugin Do not load plugins.
-n No swapfile.
-i NONE Ignore the |viminfo| file (to avoid disturbing the
user's settings).
-es Ex mode + silent batch mode -s-ex
Attention: Must be given in that order!
-S ... Source script.
-c 'set nomore' Suppress the more-prompt when the screen is filled
with messages or output to avoid blocking.
答え2
自動編集を使用する必要がありますsed(1)
(参照man sed
)。
あなたが探しているおすすめは
sed -i -e s/old/new/g -e /deletethis/d -e '/^$/d' postgresdb.out
私はあなたの期待が何であるかよくわかりません:%s/\n\n//d
。
どこ
-i
所定の位置で編集することを意味します(通常、sedはバージョンを標準出力に出力します)。-e
...修正/削除-e '/^$/d'
空行を削除する必要があります