我可以在 sed 命令中使用 Bash 变量吗?

我可以在 sed 命令中使用 Bash 变量吗?

我正在尝试执行sed带有“-n”选项的命令。

for i in 1 2 3 4 5 ; do maas maas nodes list | grep hostname | cut -d\" -f4 | sed -n '$ip'; done

sed -n '1p'我希望它然后运行 sed -n '2p'等等。

任何想法?

答案1

您想$ip用 shell 变量替换 $i 吗?使用双引号

... | sed "$ip" ...

这有一定的含义。它不适用这里但您可能必须用单引号来转义不需要的内容。

但我也会考虑重写它,这样你就不会运行相同的命令n打印第一个n行(这就是它的作用)。以下是一些替代方案...

使用head

maas maas nodes list | grep hostname | cut -d\" -f4 | head -5

存储命令输出:

output=$(maas maas nodes list | grep hostname | cut -d\" -f4)
for i in 1 2 3 4 5; do
    sed -n "$ip"
done

创建更好的sed字符串:

maas maas nodes list | grep hostname | cut -d\" -f4 | sed -n $(printf "%dp;" {1..5})

将所有搜索/修剪代码合并为一个awk

maas maas nodes list | awk -F'"' '/hostname/ && i<5 {i++; print $4}'

我是一个awk恋物癖者,所以我可能会选择后者。

相关内容