【问题标题】:Using variable in sed as an output of previous command使用 sed 中的变量作为上一个命令的输出
【发布时间】:2019-05-01 04:53:41
【问题描述】:

以下是我的“COMMAND”命令的输出。输出格式为 FILE:LINENO:PATTERN。我想要 在 diff 变量中获取以下命令输出值,并在底部提到的“sed”命令中使用它们。

<COMMAND> 
./core.pkglist:16:package linux-release     6Server     9.0.3
./core.pkglist:18:package release-server   6Server     6.9.0.4.0.1.el6
./core.pkglist:32:package upstart                 0.6.5       16.el6
./core.pkglist:33:package libnih                  1.0.1       7.el6

我想用上面命令输出的输入替换它,例如:

sed "$var1 s/$var2/$c' $var3

这可以帮助我运行以下命令:

sed '16s/9.0.3/$c/' core.pkglist

1) 上面的值 16 应该来自如下变量:

var1=$(COMMAND |awk -F':' '{print $2}')

2)9.0.3 应该来自一个变量。

var2=$(COMMAND |awk -F '{print $4}')

3)core.pkglist 应该来自一个变量。

var3=$(COMMAND |awk -F '{print $1}')

4) $c 是另一个命令输出

【问题讨论】:

  • 抱歉不清楚,能否请您发布简单的示例输入和预期的示例输出,然后让我们知道?

标签: awk sed grep


【解决方案1】:
v3=$(echo Hello world); # Stupid examples of variables set from output commands
v1=$(wc -l <<< $v3);
v2=$(awk '{print $1}' <<< $v3);
c=$(echo Good morning); 
sed "${v1}s/$v2/$c/" <<< $v3 # Use double quotes instead of singles
# echo $v3 |  sed "${v1}s/$v2/$c/" works as well

返回:

Good morning world

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 2018-01-11
    • 2012-02-15
    • 2018-02-11
    • 1970-01-01
    • 2014-08-17
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多