我有两个文件:
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
的内容。
答案 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