【问题标题】:Extract paths from string file using regex (Linux)使用正则表达式从字符串文件中提取路径(Linux)
【发布时间】:2020-10-23 20:35:47
【问题描述】:

我有一个缓存文件,其中包含 Linux 文件的文本和路径。 我想使用 Linux 正则表达式提取这些文件,但我不知道该怎么做。 以下是缓存文件的示例:

/usr/bin/mk_cmds (not prelinkable)
/usr/bin/gcov:
/lib/libc-2.5.so [0xfff88e55]
    /lib/ld-2.5.so [0x7e786fcc]
/usr/lib/rpm/rpmdeps:
    /usr/lib/librpmbuild-4.4.so [0xdb141354]
    /usr/lib/librpm-4.4.so [0x4d8c8840]

现在这是我要提取的内容:

/usr/bin/mk_cmds
/usr/bin/gcov
/lib/libc-2.5.so
/lib/ld-2.5.so
/usr/lib/rpm/rpmdeps
/usr/lib/librpmbuild-4.4.so
/usr/lib/librpm-4.4.so

我尝试了一些方法,但都不起作用(使用 grep):

^(.*/)?(?:$|(.+?)(?:(\.[^.]*$)|$))

'(\/.+?) '

你知道我该怎么做吗?我尝试了几件事,但没有任何效果。 非常感谢

【问题讨论】:

  • 我建议您添加更多与您的问题相关的标签,例如regex 以及您提取它们的方式(bashpython 等)
  • @Armion : 你传递给 grep 的标志是什么? grep 可以处理 3 种不同的正则表达式。例如,您使用的+ 不适用于grep 的basic 正则表达式。请参阅 grep 中的选项 -E-P
  • 文件路径中是否有空格?
  • 假设您的路径名以/ 字符开头并且不包含空格或: 字符:grep -o '/[^[:space:]:]*' cachefile

标签: regex bash path


【解决方案1】:

与:

sed -n 's/^[[:space:]]*\(.\+\)[: ]/\1/p' cachefile.txt

sed -n: Sed 编辑器处于无打印模式

  • s/:搜索正则表达式:
  • ^[[:space:]]*: 搜索以空格或空开头的行
  • \(.\+\):捕获 1 个或多个字符。
  • [: ]:后跟冒号: 或空格
  • /\1/p:打印 Regex 捕获的组 1。

在 regex101.com 中测试和使用这个正则表达式:

https://regex101.com/r/lFzvYq/2

【讨论】:

    【解决方案2】:

    试试

    sed -n '/:$/{s/:$//;p}; /]$/{s/^ *\(.*\) \[0x[0-9a-f]*\]$/\1/;p}'
    

    这假设缓存中只有两种需要的行。以:结尾的和以]结尾的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2023-03-04
      • 2014-10-17
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多