gpt4 book ai didi

bash - 在忽略点字符的正则表达式的同时搜索精确字符串

转载 作者:行者123 更新时间:2023-11-29 09:42:15 24 4
gpt4 key购买 nike

所以这是我的问题。我需要开发一个小的 bash 脚本,它可以 grep 一个包含帐户名的文件(我们称之为 file.txt)。内容应该是这样的:

accounttest
account2
account
accountbtest
account.test

匹配一条精确的线应该很容易,但显然事实并非如此。

我试过:

grep "^account$" file.txt

输出是:

account

所以在这种情况下输出是可以的,只显示“account”。

但如果我尝试:

grep "^account.test$" file.txt

输出是:

accountbtest
account.test

因此,为了停止将点字符解释为“任何字符”,下一个想到的明显解决方案是使用 fgrep,对吗?

fgrep account.test file.txt

正如预期的那样,这次输出是正确的:

account.test

但如果我现在尝试呢:

fgrep account file.txt

输出:

accounttest
account2
account
accountbtest
account.test

这次输出完全错误,因为我不能在 fgrep 中使用开始/结束行字符。

所以我的问题是,我怎样才能正确地 grep 整行,包括行的开头和结尾的特殊字符,同时还精确匹配“。”性格?

编辑:请注意,我确实知道“.”字符需要转义,但在我的情况下,转义不是一种选择,因为需要对帐户名进行进一步处理,这会使事情变得太复杂。

最佳答案

. 是正则表达式中的特殊字符,在传递给 grep 时需要将其转义以匹配其作为文字字符串,因此

grep "^account\.test$" file.txt

或者,如果您无力修改搜索字符串,请在 grep 中使用 -F 标志将其视为文字字符串,而不对其进行任何额外处理

grep -Fx 'account.test' file.txt

来自 man grep

-F, --fixed-strings

Interpret PATTERN as a list of fixed strings (instead of regular expressions), separated by newlines, any of which is to be matched.

-x, --line-regexp

Select only those matches that exactly match the whole line. For a regular expression pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.

关于bash - 在忽略点字符的正则表达式的同时搜索精确字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com