我有两个文件:
-
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
sedto replace all occurrences of
XXXwith 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