3

我有包含多行和某个字符的文件,这些文件可能只出现一次(在整个文件中);我需要一种方法来检查包含哪些文件。

假设我有

1. 00000
2. 00050
3. 05500
4. 00000

五只只能出现一次。如何使用 bash 和grep将此文件标记为格式错误?

我想你会首先检查哪些行包含 5。如果有不止一行,请停止。然后看看那条线上有没有超过一个五,如果有,就停下来。有一个更好的方法吗?

现在我会通过

grep "5" file | wc -l.

如果不止一个,就停下来。如果没有,请继续这一行。那么我如何计算有多少个 5 呢?起初我使用 5{1} 但这似乎不起作用 - 如果字符串是“55”,它只会匹配其中的每 5 个,而我最多需要 1 个 5。然后我想我会看看是否有超过一个 5,如果有,就停下来。但是 5{2,} 仅在有多个 5 后才有效。另一方面,

.*5.*5.*

只匹配有 2 个或更多 5 的单词,但看起来很怪诞……

有更好的建议吗?我确定有,但现在是晚上,这是我今天的大脑所想的,抱歉。请记住,我只能使用 grep。

4

2 回答 2

3

为确保字符串仅包含一次5,请使用正则表达式模式

^[^5]*5[^5]*$

如果需要出现一个或不出现5,请使用正则表达式模式

^[^5]*5?[^5]*$

如果要匹配包含多次出现的字符串5,请使用正则表达式模式

5.*5
于 2013-11-11T23:39:39.003 回答
0

你可以做:

grep -o 5 file | wc -w


解释:
grep -o - 只输出“匹配”(在这种情况下,“5”)
wc -w- 计算“单词”(令牌)

于 2013-11-11T23:41:33.090 回答