• ベストアンサー

sed、awk、または perl:行末判定

htmlファイルの整形を考えています。 行末が必ず">"で終るように整形したいと思っています。 具体的にやりたいことは、awk または sed で、 ">"で終っていない行は次の行と連結し、それが">"で終ればその段階で出力、 それでも">"で終らなければまたその次の行を連結し... という作業をしたいのですが、その様なことができるでしょうか? 1行ごとに対する処理にはある程度なれているのですが、行に渡る作業には不馴れです。 良い方法がありましたら、ご教授頂けると幸です。 また、私はperlを知らないのですが、 もし「perlならこう書けば言い」ということが分る方がおりましたら、 その場合もご教授いただけたら嬉しく思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • monanti
  • ベストアンサー率30% (12/40)
回答No.3

文面では行の途中の > は無視して良いようなので、以下で良いと思います。 {   printf( $0 ) } />$/ {   printf( "\n" ) }

noname#9431
質問者

お礼

これです!まさにこれが私がsed, awkに求めていたものです! printf($0)では改行が表示されないこと、 及び、 このような形で命令を繋げられると言うことが 私にとって新たな発見でした。 有難う御座いました!

その他の回答 (2)

  • kazu-gto
  • ベストアンサー率25% (53/205)
回答No.2

sedとawk簡単で良いですよね~. 現在awkが使える環境ではないのですぐにサンプルが書けませんが… awkでif文あたりで分岐してあげれば良いのではないでしょうか? if ( ** =">" ) print ("***") 見たいな感じで…

noname#9431
質問者

お礼

>sedとawk簡単で良いですよね~. そうなんですよね。Cなら数行要するところがにくい1行野郎で出来て仕舞うところが魅力です。 私も最初、if文分岐でやろうと思ったのですが、 行の「最後の1文字」(ご回答の ** にあたる部分)をどう書いたら良いものか分りませんでした。 ご回答ありがとう御座いました。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

perlでなら以下のようになります。 --------------------------- # 最後が >の時出力、以外は連結する。 $line = ""; while(<>){ chomp($_); $line .= $_; if (substr($line,-1,1) eq ">"){ print $line , "\n"; $line = ""; } } # 最後は ">"でなくても強制出力 if ($line ne ""){ print $line , "\n"; } ---------------------------- perl△上記のスクリプト名△htmlファイル名 と入力して下さい。 結果が標準出力に出力されるのでリダイレクトして下さい。

noname#9431
質問者

お礼

メチャクチャすばやい回答有難う御座います。 教えて頂いたスクリプトで私のやりたいことが出来ました。 Cは少しは知識がありますので、やっていることはほぼ理解できました。 有難うございます!

関連するQ&A