我正在处理 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 标志,但您可以使用外部版本sort
ex。
printf '%s\0' az-*.xml | sort -zV | xargs -0 sed '...' > AZ
或者(如果你确切知道有多少个文件)使用括号扩展的简单 shell 循环
for f in az-{1..52}; do sed '...' "$f"; done >> AZ