Vimを使用してスクリプト内のファイルの数値を変更します。

Vimを使用してスクリプト内のファイルの数値を変更します。

コマンドラインでテキストファイルに格納されている変数の数値を変更する必要があります。

Bashでスクリプトを書こうとしましたが、あまりにも多くの成功を収めました。

#!/bin/bash
clear
vim The_Generator.c

(This is hopefully where I modify the The_Generator.c file).

-c 'wq'

ベストアンサー1

Vimがこれを行う最善の方法ではありませんが、可能です:

$ vim -c '%s/^\(VARIABLE=\)\d\+/\13/' -c wq The_Generator.c

%sVi では「グローバル検索と置換」を意味します。検索パターンはで始まり、VARIABLE=その後に1つ以上の数字()が続く行を見つけ、\d+数字を3ここの例で選択した変数の新しい値に置き換えます。部品VARIABLE=は再び生産ラインに投入されます。\1 逆参照

これを次善策にするいくつかの弱点があります。

  1. Vimは、このような簡単な作業を行うにはかなり強力なプログラムです。これにより、フルスクリーンviインターフェイスが短時間点滅していることがわかります。これは無駄です。我々はより良​​いことができます。

  2. Vimは以下の選択肢と同じくらい広く配布されていません。従来のViバージョンには存在しないようなVimの3つの機能を使用しています。バークレーまたはソラリスvi:正規表現\dの逆参照と複数のフラグ-c

  3. Vimはこの種の問題を解決するのには適していないので、ここに明示的な「保存と終了」オプション(-c wq)が必要です。これは、以下の代替案としてより簡潔に表現される。

より効率的で移植可能なオプションは、次のものを使用することですsed

$ sed -i -e 's/^\(VARIABLE=\)[0-9][0-9]*/\13/' The_Generator.c

あなたが使用しているシステムが以下を使用できる場合POSIX拡張正規表現sedviaでは、-EコマンドをVimのコマンドより短くすることができます。

$ sed -E -i -e 's/^(VARIABLE=)[0-9]+/\13/' The_Generator.c

これにより、バックスラッシュのいくつかを削除し、「1つ以上の数字」をより簡潔に表現することができます。

効率が最も重要でない場合は、次のようにしてより多くの表現力を得ることができます。Perl 学校慣用語:

$ perl -pi -e 's/^(VARIABLE=)\d+/${1}3/' The_Generator.c

sed -EPerl正規表現はPOSIX拡張REよりも強力なので、代替より短いです。

ここで最大の違いは、Perlが逆参照を処理する方法です。通常、代わり$NUMに構文として提供されます\DIGITが、数字も数字なので、代替テキストと区別するために数字を中かっこ内に入れます。角かっこがないと、Perlは逆参照#13を探して一致するテキストを見つけることができず、したいことを行うことはできません。

sedこのようなことから、Awkを好む方もいらっしゃいますが、そのオプションより短く、Perlオプションよりも速い表現は考えられませんね。

おすすめ記事