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

时间:2012-11-20 22:53:52

标签: bash sed

我有两个文件:

  • fileA

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

    foobar
    

我需要创建一个新文件fileC,其内容与fileA相同,但字符XXX替换为fileB的内容:< / p>

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

我想使用sed执行此操作。

我尝试了一些我找到的示例,但我只在fileB中获得了fileC的内容。

4 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

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

编辑:

或者:

 sed 's|XXX|'$(tr -d '\n' <fileB)'|' fileA >fileC

答案 1 :(得分:2)

while IFS= read -r line; do
    echo "${line/XXX/$(< fileB)}"
done < fileA > fileC

答案 2 :(得分:1)

您的问题存在一些含糊之处,但如果我正确理解您的要求,这会有效:

#!/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

答案 3 :(得分:0)

sed是单行简单替换的绝佳工具。除此之外,只需使用awk:

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