所以我对正则表达式相当新,我想知道如何将它作为egrep命令实现。
我基本上想在文件中查找具有一个或多个" 1234"实例的行,但没有其他数字。 (允许使用非数字字符。)
示例:
1234 - 有效
12341234 - 有效
12345 - 无效(因为有5)
答案 0 :(得分:1)
您可以使用grep
提取包含1234
的行,然后将1234
替换为输入中未显示的内容,然后删除仍包含任何数字的行,并按1234
替换特殊字符串:
< input-file grep 1234 \
| sed 's/1234/\x1/g' \
| grep -v '[0-9]' \
| sed 's/\x1/1234/g'
答案 1 :(得分:1)
因此,我们要选择1234次或多次但没有其他数字的行:
grep -E '^([^[:digit:]]*1234)+[^[:digit:]]*$' file
正则表达式以^
开头,以$
结尾。这意味着必须匹配整行。
正则表达式内部分为两部分:
([^[:digit:]]*1234)+
匹配一个或多个1234
而没有其他数字。
[^[:digit:]]*
匹配上一个1234
后面的任何非数字。
在过去,人们会使用[0-9]
来匹配数字。使用unicode,这不再可靠。因此,我们使用[:digit:]
,这是unicode安全的。
让我们使用这个测试文件:
$ cat file
this 1234 is valid
12341234 valid
not valid 12345
not 2 valid 1234 line
no numbers so not valid
结果如下:
$ grep -E '^([^[:digit:]]*1234)+[^[:digit:]]*$' file
this 1234 is valid
12341234 valid
答案 2 :(得分:0)
如果您在1234阻止后不想要其他数字:
egrep '\<(1234)+(\>|[^0-9])' *
-- -- --> word delimiters
---- --> the word you're looking for
------ --> non digit characters
- --> one or more times
如果您只想要“1234”块组成的“单词”,那么您可以这样:
egrep '\<(1234)+\>' *
-- -- --> word delimiters
---- --> the word you're looking for
- --> one or more times.