アプリ版:「スタンプのみでお礼する」機能のリリースについて

htmlファイルの整形を考えています。
行末が必ず">"で終るように整形したいと思っています。

具体的にやりたいことは、awk または sed で、

">"で終っていない行は次の行と連結し、それが">"で終ればその段階で出力、
それでも">"で終らなければまたその次の行を連結し...

という作業をしたいのですが、その様なことができるでしょうか?
1行ごとに対する処理にはある程度なれているのですが、行に渡る作業には不馴れです。
良い方法がありましたら、ご教授頂けると幸です。

また、私はperlを知らないのですが、
もし「perlならこう書けば言い」ということが分る方がおりましたら、
その場合もご教授いただけたら嬉しく思います。

よろしくお願いします。

A 回答 (3件)

perlでなら以下のようになります。


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

メチャクチャすばやい回答有難う御座います。

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

お礼日時:2004/11/08 14:17

sedとawk簡単で良いですよね~.



現在awkが使える環境ではないのですぐにサンプルが書けませんが…
awkでif文あたりで分岐してあげれば良いのではないでしょうか?

if ( ** =">" ) print ("***")

見たいな感じで…
    • good
    • 0
この回答へのお礼

>sedとawk簡単で良いですよね~.

そうなんですよね。Cなら数行要するところがにくい1行野郎で出来て仕舞うところが魅力です。

私も最初、if文分岐でやろうと思ったのですが、
行の「最後の1文字」(ご回答の ** にあたる部分)をどう書いたら良いものか分りませんでした。

ご回答ありがとう御座いました。

お礼日時:2004/11/08 14:22

文面では行の途中の > は無視して良いようなので、以下で良いと思います。



{
  printf( $0 )
}

/>$/ {
  printf( "\n" )
}
    • good
    • 0
この回答へのお礼

これです!まさにこれが私がsed, awkに求めていたものです!

printf($0)では改行が表示されないこと、
及び、
このような形で命令を繋げられると言うことが
私にとって新たな発見でした。

有難う御座いました!

お礼日時:2004/11/08 14:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!