regex - 使用 bash 查找文件时提取部分文件名

标签 regex linux bash sed find

这可以简化吗?

find *.xml |  sed -n "s/\(^.*\)\.xml/\1/p"

目标是检索 xml 文件的第一部分。 我只是注意到那里有一个正则表达式重复,并且认为一定有一个简化版本

最佳答案

不,没有简化版本。 find 是一个专门的工具——它不实现任意文本处理支持。

专注于正确性的版本实际上会更加冗长,看起来像:

while IFS= read -r -d '' filename; do
  base=${filename%.xml}
  echo "Filename $filename without its extension is $base" # put your actual command here
done < <(find . -name '*.xml' -print0)

...使用 NUL 分隔的流而不是换行符分隔的流(这很容易出错,因为文件名可以包含换行符),并使用 parameter expansion仅从尾随位置进行修剪。

关于regex - 使用 bash 查找文件时提取部分文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45441274/

相关文章:

bash - 如何在 Makefile 目标中使用 Bash 语法?

linux - 在用户空间使用 futex?

javascript - linux node.js 中的意外标识符 "let"

linux - 相当于 head/tail 命令显示头/尾或一行

java - 验证字符串没有非法字符

android - 无法在android中解决ANDROID_LOG_DEBUG

bash - 从字符串中删除最后 n 个字符的单行方法

java - 如何检查正则表达式中第一个字符以外的字符

java - 在 java|groovy 中将字符串放入列表的正确方法

c++ - 将 C++11 regexp 与 gcc 4.8.2 一起使用时出现奇怪的结果(但适用于 Boost regexp)