如何在Windows中使用正则表达式匹配行尾?

时间:2011-06-09 07:10:09

标签: regex linux grep newline

我在Windows中创建了一个.txt文件,现在应该在Linux中编辑。我希望将一行的结尾与grep匹配,假设我要找到的行的内容是文件bar中的“foo bar”。然后我发出命令grep 'r$' bar,没有产生输出。

在Windows中给出一个新行包含'\ r \ n',与Linux / Unix不同,只有一个'\ n',我认为必须有一些与此有关的微妙内容。然后我用dos2unix转换文件,瞧,它可以工作。

我的问题是如何在不转换原始文件的情况下匹配内容?

任何建议都将受到高度赞赏。

谢谢和最诚挚的问候。

4 个答案:

答案 0 :(得分:7)

如果你的grep支持-P(perl-regexp),那么匹配一个CRLF:

grep -P '\r$' file

或:

grep Ctrl + V Ctrl + M file

Ctrl + V Ctrl + M 将产生^M

答案 1 :(得分:6)

使用匹配两个行结尾的模式:r\r?\n

答案 2 :(得分:-1)

试一试awk

awk '/r$/' RS='\r\n' bar

awk '/r\r$/' bar

答案 3 :(得分:-1)

我在Linux的Windows子系统(WSL)中有一个类似的问题,在Ubuntu上运行GNU bash(v4.3.48)。上面的建议对我都不起作用,但是以下建议对我有用(感谢@phuclv提示使用android:fontFamily="@font/cherry_swash" 而不是 Ctrl + V Ctrl + M

\015

我想从grep -Prno "TOKEN[^\015\012]*" * 到行尾匹配,然后又重新获得空白。因此,我尝试匹配TOKEN之后的所有非回车符(\015)和非换行符(\012)。