将一个文件中的字符串替换为另一个文件的内容



我有两个文件:

  • fileA

    date >> /root/kvno.out
    kvno serverXXX$ >> /root/kvno.out
    
  • fileB

    foobar
    

我需要创建一个新文件,fileC,其内容与fileA相同,除了字符串XXX替换为fileB的内容:

date >> /root/kvno.out
kvno serverfoobar$ >> /root/kvno.out

我想使用 sed .

尝试了一些我找到的例子,但我只得到了fileC fileB的内容。

这可能对你有用(GNU sed):

sed '1{h;d};/XXX/{G;s/XXX(.*)n(.*)/21/}' fileB fileA >fileC

编辑:

或者:

 sed 's|XXX|'$(tr -d 'n' <fileB)'|' fileA >fileC
while IFS= read -r line; do
    echo "${line/XXX/$(< fileB)}"
done < fileA > fileC

您的问题有一些歧义,但是如果我正确理解您的要求,则可以正常工作:

#!/bin/bash
string=$(cat fileB)
sed "s/XXX/$string/g" < fileA > fileC

警告:fileB不能包含/

解释:

  • string=$(cat fileB) :将fileB的内容保存到名为string的变量中
  • sed "s/XXX/$string/g": use sed to replace all occurrences of XXX with what is inside the variable $string . (The g' 部分表示全部替换)
  • < fileA:输入重定向 - 使用fileA作为输入
  • > fileC:输出重定向 - 输出到fileC

sed 是用于在单行上进行简单替换的绝佳工具。对于其他任何内容,只需使用 awk:

awk 'NR==FNR{b=b s $0; s=ORS; next} {sub(/XXX/,b)} 1' fileB fileA

相关内容

  • 没有找到相关文章

最新更新