これの関連する質問をいくつか質問していまして
ややこしく思う方へもすみません。
なんと表現したらいいのかよくわかっていないのですが
例
sample.html
<h1>テキストABCABC123123テキスト</h1> <h2>テキストABCABC123123テキスト</h2>処理する部分は
<h1>テキストABCABC123123テキスト</h1>処理する内容は
大文字小文字半角全角英数字だけを削除する
正規表現の内容 小文字半角全角英数字だけ
(間違っているかもしれませんが)
[a-zA-Za-zA-Z0-90-9]
前後の文字列はそのまま残します。
主に使う書式は
sed 's///g' あるいは
sed 's|||g' (エスケープ回避)
書いてみると
sed 's/<h1>[a-za-z0-90-9]</h1>/<h1></h1>/g'
これでは多分ヒットしない そのまま置換されてしまう。
sed 's/<h1>(.)[a-za-z0-90-9](.)</h1>/<h1>/(.*)</h1>/g'
正規表現の前後に (.*) をつけてみてもできませんでした。
これはもしかして後方参照というものを使うのなら
それは正規表現の後ろの部分だけが該当するのでしょうか
やりたいことはsedをつかってHtml内の指定タグ範囲内で
正規表現指定文字列部分にある処理をすることです。
sedで <h1></h1>内 に 削除する文字列を正規表現で指定して置換(削除))することです。
例えばawkとかもっといい方法があるのかもしれません、自分でやってみてできなかったので
アドバイスお願いします。
訂正を兼ねた補足です。まとまらなくて申しわせありません。
あとで気がついたのですが下記の<h1></h1>部分で
text部分のみへの適応が目的であると気が付かせていただきました。
思っていたよりも複雑なことをやろうとしておりましたのですみません。
sample_d.html <h1><a href="http://exmple.com/">text</a></h1>
このtext部分に様々な形態の文字列があります。
その中の大文字小文字半角全角英数字を削除したいと思います。
なのでそれを正規表現で指定したいと思います。
[a-zA-Za-zA-Z0-90-9]
これをsedでやろうとしています。
教えて頂いたも含めて書いてみます。
sed 's/<h1>/(.*\)[a-zA-Za-zA-Z0-90-9]\(.*\)<\/h1><h1>/\1\2</h1>/g'
ここで言う/\1\2部分は前半部分の/(.)が/\1で後半部分の/(.)が\2になり
正規表現部分が消えて残りの部分が残るというとこでしたらそれでいい思います。
ただそのtext部分にはランダムに様々な文字列が入っていますので
この/\1\2部分以外の正規表現部分該当箇所が<h2></h2>内に複数ランダムにある場合は
すべて拾ってくれるかという疑問があります。私が無理にワンライナーでやろうとしてることはわかっています。
スクリプトを組むべきかとも思います。
実はカレントディレクトリ内すべてのファイルにこの処理をしたくてこの質問をしておりました。
bash
1find . -type f | xargs sed -i 's/<h1>/(.*\)[a-zA-Za-zA-Z0-90-9]\(.*\)<\/h1><h1>/\1\2</h1>/g'
これだと<h1><a href="http://exmple.com/">部分まで該当してしまいます。
補足2
[a-zA-Za-zA-Z0-90-9]
は1文字しか該当しないようでいままでそれに気が付きませんでした。
補足・修正をさせていただきました。
ご指摘ありがとうございます。
回答2件
あなたの回答
tips
プレビュー