
入力する
- 各行はセミコロンで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
選択項目とセミコロンに置き換えます。