【发布时间】:2021-08-03 15:37:44
【问题描述】:
我是 shell 脚本的新手。
我想在文件中显示以空格或非空格开头的行,但grep '\S*' 有效,grep '\s*' 不匹配任何行。
'\s' 看起来很有效
我的 grep 版本是 3.4。我正在使用 WSL Ubuntu。读取的颜色表示匹配。我试过[[:space:]],结果是一样的
任何人都可以帮忙吗?谢谢
test.fa 包括
ctatccagcaccagatagcatcattttactttcaagcctagaaattgcac
haha
ok
acttgtatataaaccaaccgaagatgaggattgagagttcatcttggtgg
运行结果
【问题讨论】:
-
\s根本不保证被 POSIX 标准 grep 支持。请改用[[:space:]]。而不是\S,而是使用[^[:space:]]——这样你就不会依赖于特定于操作系统的扩展。 -
另外,不要将代码显示为屏幕截图。将其复制并粘贴到您的问题中作为文本。 Why not upload images of code/errors when asking a question?
-
您说
grep '\s*'不匹配任何内容,但您的第二个输出显示它匹配所有内容。 -
不清楚你想要什么。你说“我想在文件中显示以空格或非空格开头的行”。因此,如果该行以空格开头,那么您想要显示它。如果它以非空格开头,那么您想要显示它。那不是“任何非空行”吗?
-
@user1934428 @user1934428 不,
[:space:]是一个字符类,在任何 POSIX 工具中意味着any white space,无论他们使用的是什么 RE 类型。