【问题标题】:How can I modify this regular expression to grab the filename from ls -a output?如何修改此正则表达式以从 ls -a 输出中获取文件名?
【发布时间】:2016-06-02 19:32:15
【问题描述】:

假设我已经有了“ls -la”命令的输出,现在我只想解析出文件名。到目前为止,我已经找到了这个正则表达式,但是如何修改它以说明文件名本身存在空格?

示例“ls -la”输出:

-rw-r--r--   1 admin  staff  460340057 May  4 14:19 test_large_file.xml

我目前的正则表达式:

\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S+)

【问题讨论】:

  • 我认为这可能有效?但我可能会遗漏一些东西: \S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S|\s|-|_| %20)+
  • 在 bash 中解析 ls 输出不是一个好主意
  • ls -a为起点试一试。可能没有必要选择 -l 格式来过滤掉它。
  • @ᴳᵁᴵᴰᴼ在通过 JSch 从 ls 命令获得结果后,我正在用 Java 解析输出......真的我正在尝试解决 JSch 库中的错误。
  • JSch 有一个错误(或功能),如果 ls 命令上有一个别名为 'ls -la' 之类的东西,则库无法从 ftp 服务器获取文件。跨度>

标签: regex linux ls


【解决方案1】:

你可以使用类似的东西:

/^.*\d\s+(.*?)$/m

https://regex101.com/r/mR4rH1/1

【讨论】:

  • 这是否考虑了文件名中的新行和/或空格?
  • 是的,它应该适用于两者。你可以用上面的 regex101 测试一下
  • 你在使用正则表达式和 sed 吗?
  • 不,来自 Java 的正则表达式。
  • 你可以使用上面的正则表达式,只要确保你设置了Pattern.MULTILINE
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多