2

私は2つのファイルを持っています:

  • fileA:

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

    foobar
    

文字列が の内容に置き換えられていることを除いて、fileCと同じ内容の新しいファイル を作成する必要があります。fileAXXXfileB

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

を使用してこれを行いたいと思いsedます。

fileB見つけた例をいくつか試してみましたが、 inの内容しか得られませんfileC

4

4 に答える 4

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