在Ubuntu中以“ 1”开头的grep行


46

我尝试使用搜索“ 1”开头的行

ls -1 | grep ^1*

但是它返回的行不是以1开头。


请注意:如果要使用grep限制ls输出,如果文件名包含一些奇怪的字符(例如换行符),则会遇到问题...许多其他命令(某种程度上不是ls,至少不是我必须检查的版本)可以选择给出以空值分隔的输出,然后可以使用grep -z
Gert van den Berg

谢谢@GertvandenBerg!一些奇怪的字符(例如换行符)会导致grep出现什么问题?哪些命令提供以空分隔的输出?
蒂姆(Tim)

1
使用-print0查找,大多数其他GNU工具都具有-0或-z选项。(排序,xargs等)。如果文件名包含换行符,则不可能知道两行是包含换行符的文件名还是两个单独的文件名。
2013年

Answers:


67

您的正则表达式并不意味着您认为的那样。它匹配所有以(^)开头的行,其中一(1)次重复零次或多次(*)。所有字符串都匹配该正则表达式。grep '^1'做你想要的。


33

您尝试了以下吗?

 ls -1 | grep "^1"

也就是说,删除*基本上告诉您的grep,找到零个或多个出现的^1表达式。换句话说:匹配以1开头的行,否则不匹配。


13

尽管这不能回答您的问题,但这对于您看来是一个更好的解决方案:

ls -ld 1*

您可以使用Shell Glob列出以开头的所有文件1。注意,*在shell遍历中与正则表达式具有不同的含义。


谢谢!+1。*在Shell Globing和正则表达式中有何不同含义?
蒂姆(Tim)

2
外壳 *程序中,通配符表示“ 任何字符中的0个或多个”。正规表达式的含义在otokan的答案中进行了解释。
jordanm 2012

3

^ 1. *与整行匹配,或者如上所述,^ 1得到了包含在行中的字符串。

不同样式的正则表达式使用不同的符号表示字符,某些选项指定所需的样式。和不同的选项指定您是要匹配整行还是部分匹配,还是将整个输入匹配为一个字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.