テキストファイルで5番目のセミコロン(;)ごとに改行を追加する方法

テキストファイルで5番目のセミコロン(;)ごとに改行を追加する方法

ファイルは次のとおりです(1行1行)。

a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a; etc......

それでは、テキストを切り取り、5つのセミコロン()ごとに改行しようとしています。;それでは、次のようになります。

a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
etc....

どうすればいいですか?

答え1

そしてtrpaste

tr ';' '\n' < semicolons | paste -d';' - - - - -

テスト

$ cat semicolons
a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a

$ tr ';' '\n' < semicolons | paste -d';'  - - - - -
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a

両方trそしてpastePOSIX規格で指定されています。

;行末に必須セミコロンを追加します。

tr ';' '\n' < semicolons | paste -d';' - - - - - | sed s/$/\;/

テスト

$ tr ';' '\n' < semicolons | paste -d';' - - - - - | sed s/$/\;/
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;    

答え2

純粋にGNUsed代替品を使用してください。

sed 's/\(\([^;]*;\)\{5\}\)/\1\n/g'

または、すべてのバックスラッシュをエスケープせずに-E(@JoLに感謝します):

sed -E 's/(([^;]*;){5})/\1\n/g'

例:

$ cat test.txt
a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a; etc......

$ cat test.txt | sed 's/\(\([^;]*;\)\{5\}\)/\1\n/g'
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a; etc......

説明する:

  • \([^;]*;\):正規表現キャプチャグループは、すべての文字(セミコロンを含む)と一致します。
  • \(\([^;]*;\)\{5\}\):上記の5つの項目に一致するグループをキャプチャする正規表現。sedコマンドでは、これと一致します\1
  • s/\(\([^;]*;\)\{5\}\)/\1\n/g:セミコロン()を含むすべての文字の5つの項目をs/それぞれ自体()に置き換え、その後に改行文字()が続きます。/g\(\([^;]*;\)\{5\}\)\1\n

答え3

Sed エディタの方法 5 番目のセミコロンの後に改行文字を挿入し、改行文字で印刷し、改行文字まで削除し、パターンスペースがすべて使用されるまで n 繰り返しをフラッシュします。

$ sed -e 's/;/;\n/5;P;D' file 

Perlを使用してセミコロンをフィールド区切り文字として使用し、セミコロンをOFSとして使用し、最後に空のフィールドを使用して末尾のセミコロンを印刷する5文字列で印刷します。

$ perl -F\; -lane '$,=";";
     print splice(@F, 0, 5), q() while @F;
' file 

Awkを使用して5つのフィールドの束を調べ、最初の4つのフィールドの後にセミコロンを追加し、5番目のフィールドの後にセミコロン+改行を追加します。次に、フィールドを印刷してnullで区切ります。

$ awk -F\; -vOFS= '{
        for(i=1; i<=NF; i++)
            $(i) = $(i) (i%5 ? FS : FS RS)
  }1' file

答え4

このタイプの操作には正規表現が適していますが、視覚的なサポートと単純化のために、この操作には常にテキストエディタマクロを使用します。

vimを使用すると、次のことができます。

set textwidth=20

またはこれに類似した低額

set wrap

ファイルを編集する必要がある場合は、単純なマクロを使用できます。

qqf;f;f;f;f;i\n99999@q

そうするでしょう。

関連情報