2017-10-30 14 views
-1

H owの検索file1のfile2の内容を検索し、file3の内容をsedを使用して置き換えますか?sed file2の内容をfile1の内容で置き換えます

FILE1 "複数行"

<DB> 
    <Person><Name>Zack</Name> 
     <PersonData>...</PersonData> 
    </Person> 
    <Person><Name>Dave</Name> 
     <PersonData>...</PersonData> 
    </Person> 
    <Person><Name>Lisa</Name> 
     <PersonData>...</PersonData> 
    </Person> 
    <Person><Name>Zack</Name> 
     <PersonData>...</PersonData> 
    </Person> 
</DB> 

FILE2 "複数行"

<Person><Name>Zack</Name> 
     <PersonData>...</PersonData> 
    </Person> 

FILE3 "複数行"

<Employee><Name>Zack</Name> 
     <EmployeeData>...</EmployeeData> 
    </Employee> 

は私が従業員を持つすべてのザック人を交換しようとしています。

<DB> 
    <Employee><Name>Zack</Name> 
     <EmployeeData>...</EmployeeData> 
    </Employee> 
    <Person><Name>Dave</Name> 
     <PersonData>...</PersonData> 
    </Person> 
    <Person><Name>Lisa</Name> 
     <PersonData>...</PersonData> 
    </Person> 
    <Employee><Name>Zack</Name> 
     <EmployeeData>...</EmployeeData> 
    </Employee> 
</DB> 

編集#1:私はfile1を変更するためにあらゆる成功したSED操作することなく、簡単な

sed -i -r -e '1h;2,$H;$!d;g' -e "/PLACEHOLDER/ r $2" -e "s/PLACEHOLDER// $3" $1 

一層から試してみた 従業員のXMLタグは全く異なります人のタグ。
編集#2:xmlを解析していないので、sedまたはawkを通じてのみオカレンスを置き換えようとしています。

+2

sedはxmlを解析するためのBADツールです – RomanPerekhrest

+0

@RomanPerekhrest awkなどをお勧めしますか? –

+0

いいえ、私は適切なxmlパーサを使って解決策を提示できます。あなたはそれを適用することができますか? – RomanPerekhrest

答えて

1

これはあなたのために働くかもしれない(GNUのSED):

sed -z 's/\n/\\n/g;1s/.*/s#&#/;2s/.*/&#g/' file2 file3 | sed -z -f - file1 

は(最初にすべての改行を引用)試合や交換ファイルから置換コマンドを作成します。 。次に、ソースファイルに対してコマンドを適用します。

0

は、このbashのソリューションも考えてみましょう:

$ cat file2 
Name:John Due 
Gender:Male 
Age:21 
Address: Texas 

Name:Ed Mundo 
Gender:Male 
Age:41 
Address: California 

$ cat file22 
Name:Ed Mundo 
Gender:Male 
Age:41 
Address: California 

$ cat file222 
SurName:Ed Mundo 
Gender:Male 
Age:61 
Address: Chicago 

$ a="$(<file22)";b="$(<file222)";c="$(<file2)" 

$ echo "${c//$a/$b}" 
Name:John Due 
Gender:Male 
Age:21 
Address: Texas 

SurName:Ed Mundo 
Gender:Male 
Age:61 
Address: Chicago 
関連する問題