这个问题的最佳答案表明,
cut
可以与tr
一起使用,根据的重复空格进行剪切
< file tr -s ' ' | cut -d ' ' -f 8
我想获取目录中多个 Git 存储库的远程信息,并尝试使用以下内容从每个存储库中提取远程 URL 字段:
ls | xargs -I{} git -C {} remote -vv | sed -n 'p;n' | tr -s " " | cut -d ' ' -f1
但是,这会产生(例如)以下输出,其中我可以看到保留了两个连续的空格(Unicode 代码点 32):
origin https://github.com/jik876/hifi-gan.git
origin https://github.com/NVIDIA/NeMo.git
origin https://github.com/NVIDIA/tacotron2.git
(我还使用了
xargs
和 tr
)
我在这里缺少什么?
git remote
的输出包含制表符而不是空格。使用 expand
将它们替换为脚本中的空格:
ls | xargs -I{} git -C {} remote -vv | sed -n 'p;n' | expand | tr -s " " | cut -d ' ' -f1
或者直接用制表符分隔字段,这是
awk
的默认字段分隔符,正如 William Pursell 所建议的:
ls | xargs -I. git -C . remote -vv | awk '{ print $2; }'