ファイルを解析しましたが、いくつかの問題があります。クイック修正は空の行をその下の行に置き換えることです。それではどうすればいいですか?
次のファイルのように
apple
banana
big
sig
cake
に変換しなければならない
apple
banana
banana
big
sig
cake
cake
答え1
そしてsed
:
sed -ne '/./!{n;p;}' -e p your-file
/./! action
以下を実行する行に対してアクションを実行します(n
ここで追加の行を検索してp
印刷します)。いいえ( !
) には、任意の単一文字が含まれます (.
は、任意の単一文字に一致する正規表現演算子です)。
一部の実装には、ファイルをその場で編集するオプションもsed
あります。-i
-i ''
答え2
これにはawk
その機能を使用できます。getline()
このコマンドは、テキストファイルから空白行を選択することで機能します!NF
。つまり、これは空の行を意味します(行内のフィールド数は0です)。このgetline()
関数を使用すると、次空の行の即時行であり、変数に保存されますnxt
。
awk '!NF && ((getline nxt) >0){ $0 = nxt ORS nxt }1' file
その後、一部は変数、埋め込み改行(ANDで文字列を連結)、変数を再結合して行を{..}
構築します。呼び出しはデフォルトで行ポインタを1レベル向上させるので、ORS
2番目の追加が必要です。getline()
バラよりawkを使用してファイルを永久に変更するには? (「内部」編集、「sed -i」と同じ)ファイルを動的に変更します。
答え3
$ awk '/^$/ { ++r; next } { print; for (i=0; i<r; ++i) print; r=0 }' file
apple
banana
banana
big
sig
cake
cake
または
awk '/^$/ { ++r; next } { print; while (r > 0) { print; --r } }' file
同じ出力を提供します。
これにより、各行に1回印刷され、その上の空白行数に対応する数字が印刷されます。空行は変数から計算されますr
。
正規表現を使用して空行を検出できますが、またはを使用することも^$
できます。length == 0
NF == 0
答え4
次のようにこれを行うことができます。
$ sed -e ' /^$/{$!N' -e '}' -e 's/\n//p' inp