2

我有两个文件:

  • 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.

我尝试了一些我发现的例子,但我只得到了fileBin的内容fileC

4

4 回答 4

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
于 2012-11-21T00:04:59.433 回答
2
while IFS= read -r line; do
    echo "${line/XXX/$(< fileB)}"
done < fileA > fileC
于 2012-11-21T00:53:05.060 回答
1

您的问题有些含糊不清,但如果我正确理解了您的要求,这将有效:

#!/bin/bash

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

警告: fileB不能包含/

解释:

  • string=$(cat fileB):将内容保存fileB到一个名为的变量中string
  • sed "s/XXX/$string/g": usesed to replace all occurrences ofXXX with what is inside the variable$string . (Theg` 部分表示全部替换)
  • < fileA: 输入重定向 -fileA用作输入
  • > fileC: 输出重定向 - 输出到fileC
于 2012-11-20T23:02:44.050 回答
0

sed 是在单行上进行简单替换的出色工具。对于其他任何事情,只需使用 awk:

awk 'NR==FNR{b=b s $0; s=ORS; next} {sub(/XXX/,b)} 1' fileB fileA
于 2012-11-21T04:32:25.617 回答