将 sed 之后的正则表达式结果顺序更改为 ls -v 的顺序

将 sed 之后的正则表达式结果顺序更改为 ls -v 的顺序

我正在处理 53 个 xml 文件 ( az-0.xml~ az-52.xml)。

我跑去sed '/<loc>/!d; s/[[:space:]]*<loc>\(.*\)<\/loc>/\1/' az-*.xml > AZ把所有的东西都拿进去<loc>并将它们合并到一个文件中(AZ)。

它工作正常,但我在 loc 中找到了东西顺序错误且混乱。我想按照正确的顺序合并它们,就像ls -v(按数字)的输出一样。

az-0.xml az-1.xml ... az-52.xml

我怎样才能-v为该正则表达式提供选项?(我很陌生sed

答案1

这里不涉及 sed 正则表达式,它是关于 shell glob 扩展的排序顺序az-*.xml

如果有的话zsh,那么您可以使用n数字 glob 限定符

sed '...' az-*.xml(n) > AZ

如果您需要使用 bash,那么它没有等效的数字 glob 标志,但您可以使用外部版本sortex。

printf '%s\0' az-*.xml | sort -zV | xargs -0 sed '...' > AZ

或者(如果你确切知道有多少个文件)使用括号扩展的简单 shell 循环

for f in az-{1..52}; do sed '...' "$f"; done >> AZ

相关内容