テキスト変換のためのSEDコマンド

テキスト変換のためのSEDコマンド

助けてください。成功したローカルオペレーション 次の変換はawkの助けを借りて実装されました。 今地域(GNU Awk 4.0.2バージョンのLinux Cent OS)は完全に機能しますが、問題はリモートバージョンにあります。

ベストアンサー1

不要なものをsed使用してこれを行うことができますGNU awk。しかし。sp.config.fal.proxyhostLiferayKeyStore.jks

awkしたがって、aを変換する必要がある行のルールと最初の${ ... }キー名のみを変換する必要がある場合のルールの2つのルールで構成されるプログラムを提案します(実際には3つのルールです。最初のルール)ケースを検索する場合、ステートメントのみが見つかったすべてのケース${ ... }の次の項目、空白行を含む「その他すべての」ケースの項目)key=value

入力テキストがというファイルにあると仮定すると、config.cfg次のようになります。

awk '/\$\{[[:print:]]*\}/ {match($0,"([[:print:]]+)=\\${([[:print:]]+)}([[:print:]]*)",a); gsub("\\.","_",a[1]); gsub("\\.","_",a[2]); print toupper(a[1])": (("toupper(a[2])"))"a[3]; next}; /[[:print:]]+=[[:print:]]+/ {match($0,"([[:print:]]+)=([[:print:]]+)",a); gsub("\\.","_",a[1]); print toupper(a[1])": "a[2]; next}; {print}' config.cfg

これにより、次のことが行われます。

  • パターンを含むすべての行に印刷可能文字数を制限なしに${...}使用して、match()パターン「最大1つ」、=囲む文字列を含むパターン、およびその後の印刷可能文字数をローカライズします。${ ... }かっこで囲まれた部分はすべて「サブ式」と表示され、その部分は実際内容は最初のサブ式などaで配列に保存されます。次に、部分をa[1]取り、すべてのピリオドを下線で置き換えます。 2番目のサブ式に含まれる文字列に対しても同じことを行います。出力に置き換えられたaの大文字変換バージョンを印刷します(ただし、今回は含む)。最後に、「残りの行」である未変換バージョンを印刷します。gsuba[1]key${...}a[2]a[1]:a[2](( ... ))a[3]非常に重要:このnextディレクティブを使用してその行の追加処理をスキップし、次の行から再開します。それ以外の場合は、別の変換で2回処理(および出力)できます。

  • 私たちが偶然見つからなかった場合、${ ... }この行はする「key = value」ステートメント(/[[:print:]]+=[[:print:]]+/つまり、ゼロ以外の印刷可能文字=の後にゼロ以外の印刷可能文字が続く)を含み、「キー」部分にのみ置換と変換を適用します。同様に、ルールが一致した場合は追加処理をスキップします。

  • 最後に、上記のルールのいずれも満たしていない場合は、「現状のまま」行を印刷してください。

編集する

NULL値がある場合、つまりkey=その値をキャプチャするために他のルールも追加する必要があります。

awk '/\$\{[[:print:]]*\}/ {match($0,"([[:print:]]+)=\\${([[:print:]]+)}([[:print:]]*)",a); gsub("\\.","_",a[1]); gsub("\\.","_",a[2]); print toupper(a[1])": (("toupper(a[2])"))"a[3]; next}; /[[:print:]]+=[[:print:]]+/ {match($0,"([[:print:]]+)=([[:print:]]+)",a); gsub("\\.","_",a[1]); print toupper(a[1])": "a[2]; next}; /[[:print:]]+=[[:space:]]*/ {match($0,"([[:print:]]+)=([[:space:]]*)",a); gsub("\\.","_",a[1]); print toupper(a[1])":"; next}; {print}' config.cfg

key=valueBase64変換によってaで終わるペアがあるため、3番目のルールを2番目のルールに吸収することは不可能です。=

おすすめ記事