首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文件开头的grep (grep -f )

从文件开头的grep (grep -f )
EN

Stack Overflow用户
提问于 2013-06-09 20:13:35
回答 1查看 1.6K关注 0票数 3

我使用commands | grep -f - file从文件中提取管道内容。

但是,我只想在匹配的字符串位于行的开头时提取。我通常使用grep '^string',但它不适用于grep -f

代码语言:javascript
运行
复制
grep -f '^-' file
grep: ^-: No such file or directory

如何同时使用grep -f -grep '^'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-09 20:59:40

grep -f用于包含模式的文件。

您不能调用grep -f '^-',因为它不会将'^-'作为模式,而是作为文件名

如果不想使用文件,可以使用管道

grep -f -,其中-是接受标准输入/管道而不是文件的信号。

下面是一个例子

echo ^a | grep -f - file.txtgrep '^a' file.txt相同

更好的用法是只从某个文件中提取一些模式,这些模式用于您的文件

grep '^PAT' patterns.txt | grep -f - myfile

这将从文件patterns.txt中获取以PAT开头的所有模式,并使用下一个grep中的这些模式在myfile中进行搜索。

所以你可以把字典放在文件patterns.txt中,用它来搜索我的文件。

如果您有某种类型的字典(文件中的字符串列表,由换行符分隔),并且希望将其用作在行首包含字符串的模式,而字典中没有^,则可以使用sed

grep '^abc' dict.txt | sed 's/^/^/g' | grep -f - myfile

因此,给定文件dict.txt

代码语言:javascript
运行
复制
a
abc
abcd
fbdf

首先grep会接受"abc“和"abcd",在它们前面加上^

然后调用像grep -e '^abc' -e '^abcd' myfile这样的东西

请注意,^abcd^abc的子集。因此,字符串的末尾可能会有一个空格(或另一个分隔符

grep '^abc' dict.txt | sed 's/^/^/;s/$/\ /' | grep -f - myfile

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17009482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档