必须使用linux替换第一行第二列中的文本

时间:2018-02-14 11:23:38

标签: linux unix awk sed

我有一个文件,其中包含如下内容。我想要替换存储在名为var的变量中的文本的第一行第二列中的文字,请帮助我。

awk 'FNR==NR{a[NR]=$2;next}
     {$1=a[FNR]}1' CT-ColorMaster_3.0.0--ir48-48_build-48.mf var

file.mf

的内容
SHA1(CT-ColorMaster_3.0.0--ir48-48_build-48.ovf)= **65769231a386fad1d7ed210422216a52ae6e00e1**
SHA1(CT-ColorMaster_3.0.0--ir48-48_build-48-disk1.vmdk)= b0de466259d30bd973f603adba746814b97e8946

感谢。

3 个答案:

答案 0 :(得分:3)

SED

var=foobar; sed -r "1s/^([^ ]+) [^ ]+/\1 $var/" file.mf
SHA1(CT-ColorMaster_3.0.0--ir48-48_build-48.ovf)= foobar
SHA1(CT-ColorMaster_3.0.0--ir48-48_build-48-disk1.vmdk)= b0de466259d30bd973f603adba746814b97e8946

sed -r 使用扩展的正则表达式来完成+工作。

1s表示仅在第1行操作,s =替换。

'[^] +'是一种常见的模式,搜索不贪婪的空白。尽可能多的非空白字符,然后是空白。用$ var替换以下内容。

使用-i,您可以更改文件:

var=foobar
sed -i.bak -r "1s/^([^ ]+) [^ ]+/\1 $var/" file.mf

从file.mf生成备份file.mf.bak,并将更改写入file.mf。

没有备份:

var=foobar
sed -i -r "1s/^([^ ]+) [^ ]+/\1 $var/" file.mf

如果您的sed缺少-i选项,请使用

sed -r "1s/^([^ ]+) [^ ]+/\1 $var/" file.mf > file.mf.new 
mv file.mf file.mf.bak
mv file.mf.new file.mf

答案 1 :(得分:1)

这是你想要达到的目标吗?

var="this is some text"
awk -v var=$var `(NR==1){$2=var}1` file.mf

输出:

SHA1(CT-ColorMaster_3.0.0--ir48-48_build-48.ovf)= this is some text 
SHA1(CT-ColorMaster_3.0.0--ir48-48_build-48-disk1.vmdk)= b0de466259d30bd973f603adba746814b97e894

答案 2 :(得分:1)

您尝试的问题是var不是文件。您可以使用避免使用<(echo“$ {var}”)临时文件的技巧:

awk 'FNR==NR{a[NR]=$2;next}
     {$1=a[FNR]}1' CT-ColorMaster_3.0.0--ir48-48_build-48.mf <(echo "${var}")

当变量var是一行时,您的解决方案可以简化为@kvantour的解决方案。