unix 如何使用grep查找指定或未指定长度的单词?

o2gm4chl  于 2023-02-12  发布在  Unix
关注(0)|答案(2)|浏览(223)

在Unix命令行(CentOS7)中,我必须使用grep命令来查找以下所有单词:
1.至少 n 个字符
1.最多 n 个字符
1.正好 n 个字符
我已经搜索了这里的帖子寻找答案,并想出了grep -E '^.{8}' /sample/dir,但这只让我得到了至少8个字符的单词。
在末尾使用$不会返回任何值。例如:grep -E '^.{8}$' /sample/dir
我还想修剪/sample/dir中的信息,以便只看到特定的信息。我尝试使用管道:

cut -f1,7 -d: | grep -E '^.{8}' /sample/dir

根据订单的不同,这只能让我得到一个或另一个,而不是两个都得到。
我只希望用户名在每一行的开头,而不是在整个文件的每一行的所有单词。
例如,如果我想在我的系统上查找用户ID,结果应该是:
1.

tano-ahsoka
skywalker-a
kenobi-obiwan
ahsoka-t
luke-s
leia-s
ahsoka-t
kenobi-o
grievous

我在这里寻找两个答案,因为我已经找到了第一个答案。
2号和3号由于某种原因不起作用。
如果可能的话,我还想对所有三个输出应用切割。
任何和所有的帮助是赞赏,谢谢!

dgsult0t

dgsult0t1#

您可以运行一个grep来提取单词,运行另一个grep来根据长度进行过滤。

grep -oE '(\w|-)+' file | grep -Ee '^.{8,}$'
grep -oE '(\w|-)+' file | grep -Ee '^.{,8}$'
grep -oE '(\w|-)+' file | grep -Ee '^.{8}$'

根据需要更新模式,可能使用-r并指定目录而不是文件。可能还需要添加-h选项以防止打印文件名。

c3frrgcw

c3frrgcw2#

根据grep的实现情况,可以用途:

grep -o -E '\<\w{8}\>'     # exactly 8
grep -o -E '\<\w{8,}\>'    # 8 or more
grep -o -E '\<\w{,8}\>'    # 8 or less

相关问题