我有一个文件,其中混合了一些 HTML 和一些文本,我只想使用文本行。
我在闲逛grep
,试图找到一种方法来排除以 HTML 标记开头的行,甚至包括标记前包含空格的行。
不知何故,这对我有用,但我认为不应该:
grep '^\<' file.htm
它只显示没有 html 的行。你能解释一下为什么吗?我想我需要grep -v
一些.*
地方来完成这项工作。
答案1
\<
匹配单词开头的空字符串。
\>
匹配单词末尾的空字符串。
这也是相关的[强调我的]:
-w
--word-regexp
仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行的开头,或者前面有一个非单词组成字符。同样,它必须位于行尾或后跟非单词组成字符。单词组成字符是字母、数字和下划线。[…]由于该
-w
选项可以匹配不以单词成分开头和结尾的子字符串,因此它不同于用\<
and包围正则表达式\>
。例如,虽然grep -w @
匹配仅包含 的行@
,但grep '\<@\>'
无法匹配任何行,因为@
不是单词成分。 […]
为了完整性:
插入符号
^
和美元符号$
是元字符,分别与行首和行尾的空字符串匹配。它们被称为锚点,因为它们迫使匹配分别“锚定”到行的开头或结尾。
您使用的模式 ( ^\<
) 与单词组成字符之前的行开头匹配。字符和空格都不<
是单词的组成部分。
请注意,行首的空格不会触发匹配,不管如果后面有标签或其他东西。某些对文本行有效的字符也不会触发匹配(例如(
)。