【问题标题】:How to search for file paths using grep如何使用 grep 搜索文件路径
【发布时间】:2022-01-13 18:00:55
【问题描述】:

我正在尝试获取某个文件中列出的所有文件路径并将它们存储在一个数组中以供进一步使用

文件中的文件路径如下所示:

include /app/...;

#include /app/...; #comment

但该文件还有其他文件路径,所以我只想找到以 include 开头的路径。

我尝试了grep 'include /[^"]*' <fileToSearch>,但它丢失了一些文件并且没有捕获它们

我们将不胜感激。

【问题讨论】:

  • 你能举例说明它丢失的文件吗? include 后面可能不止一个空格?
  • 注意,最后没有$锚点,[^"]*是无效的。它将匹配行的部分直到第一个 " 字符。
  • 你是对的,在单词 include 后面有不同数量的空格,这就是为什么有些被省略的原因。有没有办法忽略中间的空格数?因为它不同
  • 使用匹配任意数量空格的正则表达式。你很清楚如何量化模式,因为你是在 [^"] 之后做的。

标签: regex bash shell grep script


【解决方案1】:

你可以试试这个正则表达式:

grep 'include\s+/+[\w\\\-/ .]*' <fileToSearch>

解释:此正则表达式匹配关键字“include”之后并以/ 开头的所有路径。关键字和路径可以用任意数量的空白字符分隔。

【讨论】:

  • 我不认为grep 支持\s 转义序列。
  • 好像和grep的版本有关
  • 如果你使用-P,GNU grep 可以做到这一点
【解决方案2】:

grep 查找包含该字符串的任何行并返回整行。

grep "^include."grep "^#include."

如果你想只获取路径(没有包含语句),你应该使用 sed, awk...

【讨论】:

  • 这与缺少某些行的问题有什么关系?
  • 我认为正则表达式(来自作者的帖子)是错误的
  • 有些末尾有 cmets,我想在文件路径之后删除 cmets,这就是我卡住的地方
  • 正则表达式有效,但我认为它就像 Barmar 所说的那样,包含后有不同数量的空格,我不确定如何解释这一点。
  • 从 grep 你得到整行。然后你应该使用 awk 或 sed 修剪开始(包括)和结束(评论)
猜你喜欢
  • 2017-12-09
  • 1970-01-01
  • 2011-01-08
  • 2017-01-28
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多