※ ChatGPTを利用し、要約された質問です(原文:再びLinuxでテキストファイルの改行を解除)
再びLinuxでテキストファイルの改行を解除
このQ&Aのポイント
Linuxでテキストファイルの改行を解除する方法を教えてください。
awkコマンドを使用してテキストファイルの改行を解除する方法について質問です。
テキストファイルの改行を解除したい場合、awkコマンドを利用する方法があります。
http://okwave.jp/qa/q8956601.html
での質問の内容ですが、さらなる回答がつきにくいようですので、再質問とします。
awk '(/^.+$/){printf("%s",$0)}(/^$/){print}' < input.txt > output.txt
で前の行との間に空白行をはさむ箇所のみ改段落とみなして段落変更をそのままにする、
という処理はできました。
さらに、前の行との間に空白行をはさんでおらず行頭で全角または半角のインデントがされているのみ、
の段落変更の部分も改行を解除せずに段落変更がされた状態を保ち、
残りの箇所のみ改行を解除するためにはどうすればよろしいでしょうか?
どうぞよろしくお願いいたします。
お礼
ありがとうございます。 > そういう前提があるなら cat -s でフィルタすればいいじゃん、と解答しようとしました 知りませんでしたが、cat -s で連続する空白行を一行のみにできるのですね。勉強になりました。 > 面倒でもそういう仕様は全部最初に書いておいてください そうですね、すみません。 これくらいで分かるだろう、という感じで質問を書いちゃうことが多いもので。 > なんか行頭のインデントが不自然ですが、削除するのかこちらでは判断できません 行頭のインデントは削除せずにそのままにしておいた方がいいです。 それと、回答No.1のお礼コメント欄で A new paragraph(ここも半角インデントを5個入れた) の部分は半角インデントを行頭に入れたのに、こう表示されちゃいます。 OKWave の仕様か、Firefox の NoScript の影響か分かりませんが。 > sed -E ':1;N;$!b1;s/\n+([ ]+)/\n\1/g;s/\n{3,}/\n\n/g;s/\n([^\n ])/\1/g' /tmp/sample これで全角または半角のインデントについては望みどおりの結果が得られるようですが、 その他の処理は同一で、空白行を削除せずそのままにしておくことはできますでしょうか? 空白行を削除するには後で cat output.txt | sed '/^$/d' とやればできるようですので。 教えていただいた構文について できれば中身の文法も理解して、自分で応用できた方がいいのですが、 やはり sed や awk は専門外の人間には少し難しいです。