我可以帮助您翻译以下内容,涉及IT技术:
我有一个包含以下数值的CSV文件:
0.00145423,3.03795e-05
我想确认所有行都是一致的,所以我尝试使用grep查找任何意外字符,像这样...
grep '[^0-9,e\-\.]' myfile
在我的理解中,它的意思是:找到任何一个字符[]
,它不是数字0-9
、逗号,
、字母ee
、连字符\-
(尝试用\
进行转义),或者句点\.
。然而,连字符仍然可以匹配。
[编辑] 这只发生在bash/grep中,而不是在Python中:
>>> re.search("[^0-9,e\-\.]", "0.00145423,3.03795e-05")
>>>
不完美的解决方案:
如果我将转义连字符移到末尾,则可以解决这个问题。
grep '[^0-9,e\.\-]' myfile
将转义的连字符放在
0-9
范围旁边会导致grep: Invalid range end
错误。这是由于什么原因?是否与bash参数解析有关,还是与grep本身有关?(注:代码运行环境为bash4.3.33和grep2.21)
.
,因为将.
放入括号表达式中意味着它是一个字面字符,并且转义-
也没有任何作用(正如您所发现的那样)。 - Ed Morton