プロが教えるわが家の防犯対策術!

<h4 class="body_h4">製品仕様表</h4><table class="body_table"><tr><th class="t_top">メーカー</th><td class="t_top">コメットカトウ</td></tr><tr><th class="n_th">型式</th><td class="n_td">XY-15603T</td></tr><tr><th class="n_th">本体寸法(mm)</th><td class="n_td">W1500xD600xH800</td></tr><tr><th class="n_th">トップバーナー個数</th><td class="n_td">2重バーナー Φ180 12000kcal/h [ 3 個 ]</td></tr><tr><th class="n_th">ガス消費量</th><td class="n_td">13Aガス/41.9kW (36000kcal/h)<br>LPガス/41.9kW (3.00kg/h)</td></tr><tr><th class="n_th">ガス接続口径</th><td class="n_td">20A</td></tr></table>

上記のようなHTMLソースコードがあります。
<tr><th class="n_th">型式</th><td class="n_td">XY-15603T</td></tr>
の部分だけを消したいのですが、どのように行えばよろしいでしょうか。
XY-15603Tの部分は色々あり、*を使えばよいのかな?と思いしてみているのですがうまくできません。

実行しているコマンドは下記になります。
cat pcinfo.csv | sed -e 's/<tr><th class="n_th">型式<\/th><td class="n_td">.*<\/td><\/tr>//g' >> test.csv

A 回答 (6件)

.* の部分を [^<]* にします。



「<以外の文字の連続」を表します。
    • good
    • 1
この回答へのお礼

"でも問題が起きてたようで、なぜか\""で文字列として認識してくれました。

[^<]*でできました。
皆さん回答ありがとうございました。

お礼日時:2020/08/07 13:35

○sed での []内での表現について。


先頭にあるとき、 - に \ によるエスケープは不要です。
というか、あると期待通りになりません

○sed での / の扱い
sコマンドは
sM〜M〜M
の形になります。 M は任意の一文字で、 / 以外でも可能です。
/を多く使う正規表現の場合、 / でない文字にするとすっきりすることがあります。
例えば、 | を使ってないので
s|<tr><th class="n_th">型式</th><td class="n_td">[-0-9A-Za-z][-0-9A-Za-z]*</td></tr>||g
とも書けます。

○sed の多言語対応
漢字(他日本語の文字や「全角」文字等)が含まれている場合、期待通りに動かないことがあります
・見た目の1文字が、複数文字扱いされる
・見た目は同じなのに、同じ文字として解釈してくれない(ファイルはShift_JIS、コマンドラインはUTF-8、等)
    • good
    • 0

うーん、動きませんか。


手元で簡単なテストケースをつくってやってみましたが、#1の回答と同じことをやるとinvalid rangeのメッセージ(あなたのと同じメッセージ)がでてエラーになりますが、#3と同じことをやると、sedで指定の文字列は削除できています。
/の数とかあってますか?
    • good
    • 0
この回答へのお礼

cat pcinfo.csv | sed -e 's/<tr><th class="n_th">型式<\/th><td class="n_td">[0-9A-Za-z\-][0-9A-Za-z\-]*<\/td><\/tr>//g' >> test.cs

で実行はできました。すみません。私のミスでした。
しかし、対象の文字列は消えないみたいです。

お礼日時:2020/07/31 16:06

[0-9A-Ta-z\-][0-9A-Ta-z\-]* ならどう?


\-を最後に持ってきただけですけど。
    • good
    • 0
この回答へのお礼

sed: -e expression #1, char 91: `s' に対するオプションが不明です

と出てしまいます><;
何度も回答頂いているにも関わらずすみません。

お礼日時:2020/07/31 15:39

A-TではなくA-Zでした。


もし小文字も含むなら、\-0-9A-Za-z。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

$ cat pcinfo.csv | sed -e 's/<tr><th class="n_th">型式<\/th><td class="n_td">[\-0-9A-Za-z][\-0-9A-Za-z]*<\/td><\/tr>//g' >> test.csv
sed: -e expression #1, char 92: 無効な範囲終了です

エラーが出てできませんでした。

お礼日時:2020/07/31 15:23

いろいろありのところで、どういう文字がつかわれているかによりますが、英数字とハイフンだけなら、


.*の代わりに、[\-0-9A-T][\-0-9A-T]*でやってみたらどうですか?
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング