- 就像使用 grep 在行尾检测模式一样,但对于 CRLF 行终止符的 DOS 文件。
- 就像在https://unix.stackexchange.com/a/462633/374303中一样,一种方法是使用
dos2unix
,但我的远程服务器中没有它。
即,\r
不适用于grep
扩展正则表达式模式?:
$ printf 'abcd\r\n' | grep -Ec 'd\r$'
0
$ printf 'abcd\r\n' | grep -c 'd.$'
1
$ printf 'abcd\r\n' | grep -Pc 'd\r$'
1
我认为\r
是扩展正则表达式的一部分,就像在
https://valelab4.ucsf.edu/svn/3rdpartypublic/boost/libs/regex/doc/html/boost_regex/syntax/basic_extended.html中一样。不?
或者它确实是一个限制grep
?
不,除了in
\r
之外,它不是标准基本正则表达式的一部分,也不是扩展正则表达式的一部分,尽管有些s 支持它作为扩展,如from ast-open 支持它的所有正则表达式风格(使用、和默认 BRE)。awk
grep
grep
-E
-X
-P
虽然它是正则表达式的一部分,
perl
但也是 PCRE 的一部分,因此应该由grep
支持 a 的实现来支持-P
。如今,大多数 shell 都支持
$'...'
ksh93 中的引号形式,其中\r
扩展为回车符。所以有了这些,你可以这样做:(*LF)
PCRE 允许使用,(*CRLF)
,等指令指定行分隔符的类型(*CR)
,但grep -P
即使在使用 PCRE 实现类似 perl 的匹配的情况下也不能使用,因为grep
它适用于一个(LF 分隔)行的内容一次,因此在正则表达式匹配的字符串中找不到 LF。然而,它可以在
pcregrep
'sM
ultiline 模式下使用:(
sed -n l
将 CR 显示为\r
)。使用 GNU
grep
,您可以将其与-z
标志一起使用,使其适用于 NUL 分隔的记录而不是行:(除了在记录的末尾之外,还启用
m
ultiline 标志$
以匹配每行的末尾,并将tr
NUL 解析为 LF 在输出上进行显示)。