ファイルは次のとおりです(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
そしてtr
paste
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 ';' '\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
そうするでしょう。