我有一个文件,其中包含如下内容。我想要替换存储在名为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
感谢。
答案 0 :(得分:3)
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的解决方案。