【Linux】grepの否定で検索【vオプション】

grepの否定の覚書です。

結論から言うと、grepコマンドに、-v オプションをつけてやると否定の検索ができます。

ことの顛末も書いておきます。

HTMLでリンクを記述する場合には、パラメーターの繋ぎに使う&を実体参照として、& と記述しなければならない。

今回は、そのチェックのために、複数ディレクトリに有る500ほどのファイルに存在する&および&を確認しようと思った次第です。

そこで、まずは、次のコマンドで、&の存在するファイルを確認。

grep -n '&' */*

こうしてやると、&を含む行が表示されますが、&のあるすべての行がすべて表示されるので、&が実体参照で正しく記述されているかの確認が困難です。

そこで、grepのAND検索と否定を利用して絞り込みをしていきます。

grep '&' */* | grep -vn '&&'

絞込みは、パイプ(|)を使います。また、否定には、-v オプションを使います。

こうしてやることで、&&の行を除外して検索できます。

同様に、次のようにします(実質1行)。

grep '&' */* | grep -v '&&' | grep -v 'nbsp' |
grep -v 'amp' | grep -v 'gt' | grep -nv 'lt'

これで、&&や他の実体参照を除外できます。

ただし、これだと、&と実体参照が有る場合、&単独のものも表示されないので、他にもgrepをして確認します。

grep '&' */* | grep -n 'href'

こうしてやると&がある行で、かつ、リンクを作っているであろう行を絞り込み検索できます。

その他、いろいろ試してみて、リンク文字列に、&が単独で利用されていないか確認します。

もっとスマートなやり方もあると思いますが、急ぎの確認でざっと見るのにはこれで十分でした。

他のやり方があれば、コメントくださるとありがたいです。

なお、最初は、grepと正規表現での否定の検索を考えましたが、-v オプションの方が簡単だと思います。正規表現は難しい・・・。

カテゴリー: UNIX/Linux パーマリンク

広告

コメントを残す

メールアドレスが公開されることはありません。