【发布时间】:2022-01-17 23:26:30
【问题描述】:
我想列出我使用 awk 收到的实例名称,然后将它们一一删除。我已经通过它们各自的列提取了实例名称并忽略了列标题名称。我有实例名称列表,但我一直在弄清楚如何对每个名称运行删除命令。我相信 awk 正在返回一个大字符串,但我不知道如何拆分字符串并通过我的删除命令运行它。
这是行不通的行
multipass list | awk '{print $1}' | awk 'NR!=1 {print}' | xargs -0 multipass delete
这是我得到的回报
instance "k3s
node1
node2
symfony
" does not exist
【问题讨论】:
-
multipass list命令的结果是什么样的? -
awk可以处理整个进程,而无需通过管道传输到多个进程。在awk中,您可以使用system (rm" "filename)从awk中删除文件。每当您使用awk并发现自己在使用process | process2 | process3 | ...时,很可能只需一次调用awk即可完成。 -
@DavidC.Rankin ITYM
system ("rm -- \047"filename"\047")否则rm是一个空变量,shell 将获得filename未引用,如果它以-开头,则会失败。 -
使用
xargs -0,您是在告诉 xargs 输入是 NUL 分隔的,而不是换行分隔的 - 不要那样做。 -
@EdMorton - 很好,我知道我总是首先使用
sprintf()是有原因的...