替换内联文件中的字段

替换内联文件中的字段

我有一个包含以下内容的文件(a.txt):

Redhat master 12345678 V1A 20.0/20.0.1
Windows slave 12345678 V1B 19.0/19.0.1

我想用“master”一词来 grep 行,并用新值替换第四个和第五个字段。

例如,新的 a.txt 可能是:

Redhat master 12345678 V1B 20.0/20.0.2
Windows slave 12345678 V1B 19.0/19.0.1

这里“V1A”被替换为“V1B”,“20.0/20.0.1”被替换为“20.0/20.0.2”

有人可以帮助实现这一目标吗?

我还想传递新值作为脚本参数:

我可以将新值作为参数传递给脚本吗?我正在尝试下面的脚本:

脚本(test.sh)内容如下:

#!/bin/bash

if [ "$2" == "" ]; then
    echo usage: $0 \<version\> \<revision\>
    exit -1
else
   version=$1
   revision=$2
fi
awk '/master/{$4="$1";$5="$2"}' a.txt >newa.txt

当我跑步时:

#bash test.sh V1B 20.0/20.0.2

它不起作用。

答案1

awk

awk '/master/{$4="V1B";$5="20.0/20.0.2"};1' a.txt

首先,我们搜索包含单词“master”的行,然后替换第 4 个 ( ) 和第 5 个 ( ) 字段/master/中的值。最终只是打印所有内容。$4$51

编辑:

要将新值作为参数传递,您需要使用-vswitch in awk,例如:

x="V1B"
y="20.0/20.0.2"
awk -v VAR1="$x" -v VAR2="$y" '/master/{$4=VAR1;$5=VAR2};1' a.txt

(但请注意,如果这些变量包含反斜杠,它将无法正常工作)。

答案2

在行中

 awk '/master/{$4="$1";$5="$2"}' a.txt >newa.txt

“$1”不保存从 shell 传递的值。

你应该写

awk '/master/{$4="'$1'";$5="'$2'"}' a.txt > newa.txt

这样 $1 frm 调用 shell 就会被放入 awk 文件中。

相关内容