いくつかのHTMLといくつかのテキストが混在するファイルがあり、テキスト行のみが必要です。
私はgrep
HTMLタグで始まる行、さらにはタグの前にスペースを含む行を除外する方法を見つけようとしています。
どういうわけかこれは私にとって効果的ですが、それをしてはいけないと思います。
grep '^\<' file.htm
HTMLのない行のみを表示します。理由を説明できますか?私の考えでは、このことができる場所grep -v
が必要だと思います.*
。
ベストアンサー1
~からGNUgrep
マニュアル:
\<
単語の先頭の空の文字列と一致します。
\>
単語の末尾の空の文字列と一致します。
これも関連しています[強調鉱山]:
-w
--word-regexp
単語全体を構成する項目を含む行のみを選択してください。テストでは、一致する部分文字列が行の先頭にあるか、単語を作成しない文字が前にある必要があります。繰り返しますが、行の末尾にあるか、単語を形成しない文字が後に続く必要があります。単語を構成する文字は、文字、数字、下線です。[… ]このオプションは、単語コンポーネントで始まり、終わらない部分文字列と一致する可能性があるため、周囲の正規表現とは
-w
異なります。たとえば、埋め込まれた行だけが一致しても単語コンポーネントではないため、どの行とも一致できません。 [… ]\<
\>
grep -w @
@
grep '\<@\>'
@
完全性のために:
キャレット
^
とドル記号は、$
それぞれ行の先頭と末尾の空の文字列と一致するメタ文字です。一致を各行の先頭または末尾に「固定」するため、アンカーポイントと呼ばれます。
使用するパターン(^\<
)は、単語を構成する文字の前の行の先頭に一致します。文字やスペースは<
単語の一部ではありません。
行の先頭のスペースは一致をトリガーしません。にもかかわらず裏面にラベルや何かがある場合。テキスト行に有効な特定の文字(たとえば(
)も一致をトリガーしません。