HTMLファイルからすべてのIDを削除するには、grepを試してください。

HTMLファイルからすべてのIDを削除するには、grepを試してください。

id=" "ファイルからすべてを削除しようとしていますが、.htmlどこで間違っているのかわかりません。正規表現を使ってみましたが、得たのは.htmlUbuntu端末でファイルをレンダリングするだけです。

パスワード:

grep -Ev '^$id\="[a-zA-Z][0-9]"' *.html

で実行していますbash ex.sh

ベストアンサー1

私の判断にずれても(sed一部)投稿します。

つまり、迅速で汚れた問題を解決するには、続行してください。 Python、Perlなどのような他のものは、正規表現に頼らずにHTML文書を処理するモジュールに依存します。

より簡単な方法は、例えばsedを使用することです。

sed 's/\(<[^>]*\) \+id="[^"]*"\([^>]*>\)/\1\2/' sample.html > noid.html

説明する:

            +--------------------------------- Match group 1
            |                      +---------- Match group 2
         ___|___                ___|___
        |       |              |       |  
sed 's/\(<[^>]*\) \+id="[^"]*"\([^>]*>\)/\1\2/' sample.html > noid.html
     |   |  | |   |  |    | ||    |  |      |
     |   |  | |   |  |    | ||    |  |      +- \1\2  Subst. with group 1 and 2
     |   |  | |   |  |    | ||    |  +-------- >     Closing bracket
     |   |  | |   |  |    | ||    +----------- [^>]* Same as below
     |   |  | |   |  |    | |+---------------- "     Followed by "
     |   |  | |   |  |    | +----------------- *     Zero or more times
     |   |  | |   |  |    +------------------- [^"]  Not double-quote
     |   |  | |   |  +------------------------ id="  Literal string
     |   |  | |   +---------------------------  \+   Space 1 or more times
     |   |  | +------------------------------- *     Zero or more times 
     |   |  +--------------------------------- [^>]  Not closing bracket
     |   +------------------------------------ <     Opening bracket
     +---------------------------------------- s     Substitute

sed -iファイルを所定の位置に編集します。 (後悔するかもしれませんが、元に戻すことはできません。)


Perlを使った例:

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TokeParser::Simple;
use HTML::Entities;
use utf8;

die "$0 [file]\n" unless defined $ARGV[0];

my $parser = HTML::TokeParser::Simple->new(file => $ARGV[0]);

if (!$parser) {
    die "No HTML file found.\n";
}

while (my $token = $parser->get_token) {
    $token->delete_attr('id');
    print $token->as_is;
}

grepコマンドは何も一致しません。ただし、反転オプションを使用すると、-v一致しないすべての項目が印刷されるため、ファイル全体が印刷されます。

grepはそうではありません内部ファイル修飾子ただし、通常はファイル内のコンテンツを検索するツールです。たとえば、次のようになります。

grep -o '\(<[^>]*\)id="[^"]*"[^>]*>' sample.html

-o一致するパターンのみが印刷されることを示します。 (全行ではない)

sedなどはawk通常、ストリームまたはファイルを編集するために使用されます。たとえば、上記の例のようになります。


grepにいくつかの誤った概念があります。

 id\="[a-zA-Z][0-9]"

正確に一致:

  1. id=
  2. 一つ範囲内の文字a-zまたはA-Z
  3. 続いて一つ数字

つまり、次のようになります。

id="a0"
id="a1"
id="a2"
...
id="Z9"

次のものはありません:id="foo99"またはid="blah-gah"


また、次のように一致します。

 ^ <-- start of line (As it is first in pattern or group)
 $ <-- end of line   (As you use the `-E` option)
 # Else it would be:
 ^ <-- start of line (As it is first in pattern or group)
 $ <-- dollar sign   (Does not mean end of line unless it is at end of
                      pattern or group)

だから何もありません。

おすすめ記事