単語リストに基づいてバッファ内の単語を大文字で表示するコンソールユーティリティ

単語リストに基づいてバッファ内の単語を大文字で表示するコンソールユーティリティ

私はまだvi / vimユーザーではありません。私はコンパイラが大文字のキーワードの使用を要求する古いプログラミング言語を学んでいます。 1つの学習リソースでは、vi / vimに一連のキーワードを吸引するように依頼することを提案します。

%s/\<import\>/IMPORT/g
%s/\<module\>/MODULE/g

コマンドの使用:だから

その後、現在のバッファに適用されます。

私は同じことができる* nixコンソールユーティリティを探しています。

そのようなユーティリティは存在しますか?ティア

答え1

Vimコマンドを含むファイルがあると仮定すると、Vimエディタのオプションを使用してファイルに適用できます-S

$ cat edits
%s/\<import\>/IMPORT/g
%s/\<module\>/MODULE/g
%s/\<bumblebee\>/BUMBLEBEE/g
%s/\<please\>/PLEASE/g
%s/\<for\>/FOR/g
%s/\<over\>/OVER/g
%s/\<do\>/DO/g
%s/\<done\>/DONE/g
wq
$ cat program
module top.

import "library".

for i over <zoidberg> -> do
        bumblebee i:th, please.
done
$ vim -S edits program
$ cat program
MODULE top.

IMPORT "library".

FOR i OVER <zoidberg> -> DO
        BUMBLEBEE i:th, PLEASE.
DONE

wqファイルの最後のファイルは、edits元のファイルと同じファイル名で文書を保存します。

また、これは以上端末でファイルを編集する方法で、通常は次のストリームエディタを使用しますsed(下記参照)。これの最大の問題は、Vimが非対話型エディタではなく、編集スクリプトを実行する前にドキュメント全体をメモリに読み込むことです(これは優雅ではない必要ない場合)。単純なキーワードリストの代わりに編集スクリプトを維持する必要があるのも面倒です。


1行にキーワードを1つずつ大文字に変換する必要がある一連の小文字のキーワードを含むファイルがあるとします。

単純なPerlプログラムはリストをsed編集スクリプトに変換します。

$ cat keywords
import
module
bumblebee
please
for
over
do
done
$ perl -pe 's{.*}{s/\L\\<$&\\>/\U$&\L/g}' keywords
s/\<import\>/IMPORT/g
s/\<module\>/MODULE/g
s/\<bumblebee\>/BUMBLEBEE/g
s/\<please\>/PLEASE/g
s/\<for\>/FOR/g
s/\<over\>/OVER/g
s/\<do\>/DO/g
s/\<done\>/DONE/g

Perlコードがすることは、各行を取得して式sedに挿入するだけです。

s/\<word\>/WORD/g

ここwordで、WORDおよびはファイルの特定の行の文字列ですkeywords。まず小文字、次に大文字です。

その後、プログラムのソースコードに適用できます。

$ cat program
module top.

import "library".

for i over <zoidberg> -> do
        bumblebee i:th, please.
done
$ perl -pe 's{.*}{s/\L\\<$&\\>/\U$&\L/g}' keywords | sed -f /dev/stdin program
MODULE top.

IMPORT "library".

FOR i OVER <zoidberg> -> DO
        BUMBLEBEE i:th, PLEASE.
DONE

を使用すると、-f /dev/stdinPerlsed出力から編集スクリプトを読み込み、指定したファイル(この場合はファイル名program)に適用できます。

この単純な単語置換は、ユーザー言語の引用規則を知らないため、置換が不要な文字列などで見つかったキーワードを置き換えます。

答え2

同様に、代替パターンとしてsedファイルを使用してから、sedファイルをターゲットテキストに適用できます。

以下は、サンプルの sed ファイルの内容です。my_custom_substitutions.sed 上記の交換に基づいて:

s/\<import\>/IMPORT/g
s/\<module\>/MODULE/g

これらのカスタム代替品がどのように見えるかを確認できます。今後実際には、次のようにファイルに適用します。

sed -f my_custom_substitutions.sed targetfile.txt 

sed を使用してこれらのカスタム置換項目をターゲット・ファイルに適用するには、次のようにします。

sed -i -f my_custom_substitutions.sed targetfile.txt 


別のアプローチは、次のものを使用することですtr

echo "lower case text" | tr '[a-z]' '[A-Z]'

ファイルの2行目に対してvimでこれを行うには、次のようにします。

:2 ! tr '[a-z]' '[A-Z]'   

行2から行4などの範囲内の複数の行に適用するには、次のようにします。

:2,4  ! tr '[a-z]' '[A-Z]'

関連情報