1行の特定の文字を変更する

1行の特定の文字を変更する

入力する

  • 各行はセミコロンで8部分に分かれています。
  • 各部分には、単語、数字、スペースなどを含めることができます。

出力

6番目のセクションのスペースをセミコロンで置き換えて、行を再び分割してセクションの合計数を9つにしようとしています。

はい

1;30;68;Az LEMda;Ads Awdsâ;1 Bethesda, Galilea, Impe Mkals;29;63
264;16 October 1978;2 April 2005;AAz Jgfg adal II;Madwl Qózca Asdtyła;20 May 1920 Maklo, Polasn;58;84

次のように終了します

1;30;68;Az LEMda;Ads Awdsâ;1;Bethesda, Galilea, Impe Mkals;29;63
264;16 October 1978;2 April 2005;AAz Jgfg adal II;Madwl Qózca Asdtyła;20;May 1920 Maklo, Polasn;58;84

努力する

スペースを見つけるために正規表現のすべてを試してみましたが、\zs失敗しました。私が得た最も近いのは、5番目のセミコロンを見つけることでした。

%s/\(.\{-};\zs\)\{5}/;/g

しかし、5番目のセミコロンの後の数字の後にスペースを見つける必要があるため、このアイデアはどこにもリンクされません。これで、以前に定義したセクションでスペースを見つけようとします。

vimと入力することはできますが、やはりawk私はvimに初めて触れます。 6番目の部分を見つけてスペースをセミコロンに変更しましたが、最初のスペースだけでなくすべてのスペースが変更されました。

:%! awk 'BEGIN{FS=OFS=";"} {gsub(/ /, ";", $6)} 1'

6番目の部分の最初のスペースをどのように変更できますか?

ベストアンサー1

ビームから:

%s/^\(\([^;]*;\)\{5\}[^ ;]*\)\s/\1;/

意味は次のとおりです

  • 次に選択\1

    • 行の先頭から^
    • セミコロンではなく5つの文字列\{5\}の後にセミコロンが続きます。
    • 6番目のフィールドにセミコロンやスペース以外の先行文字を追加します。
  • その後にスペースがあります

  • \1選択項目とセミコロンに置き換えます。

おすすめ記事