gpt4 book ai didi

linux - 为什么 grep 搜索 '0,^M$' 返回空行?

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:10 25 4
gpt4 key购买 nike

$ cat -e test.csv | grep 150463452112
65,150463452112,609848340831,2.87,126,138757585104,0,0,^M$
65,150463452112,609848340832,3.37,126,138757585105,1,0,^M$
$ grep 150463452112 test.csv | grep '0,^M$'


$

我使用 Ctrl+V Ctrl+M 输入“^M”,需要匹配以“0,^M$”结尾的行。但是,grep 返回空行。

问题>搜索结尾的正确语法是什么?

谢谢

,0,0,在hexdump中看到如下:

2c 30 2c 30 2c 0d 0a

|,0,0,..|

最佳答案

潜在的问题是您的文件实际上不包含任何双字符^M序列(即使包含,^ 对正则表达式来说是特殊的,与自身不匹配)。相反,它在最后一个换行符之前包含一个回车符(是 DOS 风格而不是 UNIX 风格的文本文件)。您要匹配的不是 ^M 序列,而是文字回车符。


一种方法是通过 grep 使用 bash 和 ksh $'' C 风格的字符串文字语法传递一个 shell 文字:

grep $'0,\r$'

...您可以按如下方式进行测试:

## test function: generate two lines with CRLFs, one "hello world", the other "foo,0,"
$ generate_sample_data() { printf '%s\r\n' 'hello world' 'foo,0,'; }

## demonstrate that we have 0d 0a line endings on the output from this function
$ generate_sample_data | hexdump -C
00000000 68 65 6c 6c 6f 20 77 6f 72 6c 64 0d 0a 66 6f 6f |hello world..foo|
00000010 2c 30 2c 0d 0a |,0,..|
00000015

## demonstrate that the given grep matches only the line ending in "0," before the CRLF
$ generate_sample_data | egrep $'0,\r$'
foo,0,

关于linux - 为什么 grep 搜索 '0,^M$' 返回空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46057345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com