
このファイルを sed したいのですが、 sed の BRE が期待どおりに機能しません。
私が今持っているのは基本的に次のとおりです:
$ cat Dungeon | grep -P -o '<\/.*?>'
私の質問は、これをどうやって sed するかということです。grep できた部分を削除したいのです。代替案も歓迎します。ただし、可能であれば、これをどうやって解決するかも知りたいです。
(はい、HTML で正規表現を使用しています)
答え1
「PCRE sed」ツールを使用します。
cat Dungeon | perl -pe 's/<\/.*?>//g'
perl -i -pe 's{</.*?>}{}g' Dungeon
grepとsedを組み合わせることはまずありません。両者は、既存の一致をファイル内の位置とともに渡すのに十分なコンテキストを交換しません。grep -b
各一致のバイトオフセットを取得してみてください(そして、sed以外のもの(ファイルから対応するバイト範囲を削除する)か、grep -o
出力を sed の POSIX 拡張正規表現に適したモンスター正規表現に変換してみてください(a|b|c
分岐構文の改行をパイプに変更し、すべての正規表現の特殊文字をエスケープするようにしてください。これには別の 'sed' 呼び出しが必要です)。ただし、どちらも価値に見合わないほどの労力がかかります。