リンク段落を含むテキストファイルがあります。各段落を空行で区切る必要があります。各段落は>FP0
パターンで始まる必要がありますが、段落は互いに接続されているため、現在のファイルの行の先頭にはパターンが見つかりません。sed
コマンドを試しましたが、>FP0
パターンを含む行に基づいて区切りましたが、新しい段落の先頭には表示されません。
段落例
>FP004340TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT>FP00598AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>FP005521GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
使用されたsedコードは
sed '/>/s/^/\n/'
出力は次のとおりです
>FP004340TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
TTT>FP00598AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A>FP005521GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
(新しい段落の開始時に> FP0の前に文字は必要ありません。)
答え1
代わりにPerlを使用できます。
$ perl -pe 's/>/\n\n>/g' file
>FP004340TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
>FP00598AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>FP005521GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
ただし、ファイルの最初の文字がある場合は、その前に他の文字がある場合>
にのみ置き換えることを制限できます。>
$ perl -pe 's/(.)>/$1\n\n>/g' file
>FP004340TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
>FP00598AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>FP005521GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
またはGNUを使用してくださいsed
。
$ sed -E 's/(.)>/\1\n\n>/g' file
>FP004340TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
>FP00598AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>FP005521GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
そして、次のようにsed
:
sed 's/\(.\)>/\1\
\
>/g' file
>FP004340TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
>FP00598AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>FP005521GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
答え2
スクリプトsed
はin itを含むすべての行を検索しますが、行の先頭に改行文字を追加します(正規表現では>
これが意味するものです)。^
おそらくこれを試してみてください。
sed 's/>/\n&/g' file
ただし、\n
リテラル改行が生成されるかどうかはsed
バージョンによって異なります。必要な動作は多くのLinuxプラットフォームで一般的ですが、同じではありません。 (どのディストリビューションおよび/またはバージョンを明確にするか、sed
AwkやPerlなどのより移植可能なソリューションを試してください。)
awk -F '>' 'BEGIN { OFS="\n>" } { $1=$1 } 1' file
ハッキングは{ $1 = $1 }
awk が行を分割するように強制します。行に何も変更されない場合は、単に入力を出力にコピーして処理を最適化しますが、これは何かが変更されたと思います。
複数の改行が必要な場合は、各新しい行の前に空白行を取得するには、明らかに\n
2つ以上の変更を入力してください。\n\n
答え3
GNU sed
$ sed 's/>/\n\n&/2g' input_file
POSIXly sed
sed -e '
y/>/\n/
s/\n/>/
s//&&>/g
' input_file
$ perl -pe 's/(?<!^)(?=>)/\n\n/g' input_file
awk -v RS=">" -v ORS= '
NR>1&&sub(/^/,(!k++ ? ORS : "\n\n") RS)
' input_file