Sed、awk、grep、tr、または必要なものを使用して、テキストファイル内の2つの改行のみを置き換えることは可能ですか?
this
is
data
this
is
more
data
私がする必要があるのは、すべての二重改行(\ n\n、空白はありません)をスペースに置き換えることですが、すべてのデータポイントが独自の行にあるように、すべて単一の改行を保持します。
this is data
this is more data
これは可能ですか?
試してみてください
sed ':a;N;$!ba;s/\n\n/ /g' filename
これにより、最初にファイル全体が読み取られ、次に2つの改行(およびそれらのみ!)がスペースに置き換えられます。ほとんどのGNU/Linuxユーティリティは一度に1行ずつ入力を処理するため、このトリック(ファイル全体を読み取る)が必要です。これにより、間違った結果が得られます。
ちょうど別の変種:awk
バージョン
awk 'BEGIN{RS="\n\n" ; ORS=" ";}{ print }'
@MariusMatutiaeの回答に追加:ファイルが大きすぎてメモリに読み取れない場合は、従来の方法を使用できますが、はるかに低速です。
EMPTY=0
BUFFER=""
while read L; do
if test -z "$L"; then
EMPTY=$(($EMPTY+1))
BUFFER="$BUFFER\n"
else
if test $EMPTY -lt 2; then
echo -en "$BUFFER"
else
echo " "
fi
echo "$L"
BUFFER=""
EMPTY=0
fi
done < filename
echo -ne "$BUFFER"