簡體   English   中英

sed用file1中的file3內容替換file2內容

[英]sed replace file2 content with file3 content in file1

^ h流量來搜索文件1的文件2頁的內容,並使用sed的file3的內容替換它們?

文件1“多行”

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

文件2“多行”

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

文件3“多行”

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

我正在嘗試用一名員工替換每個 Zack 人。 我已經嘗試過從簡單

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

在沒有任何成功的 sed 操作的情況下,為了將 file1 更改為:

<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:員工 xml 標簽與人員標簽完全不同。
編輯 #2:我不是在解析 xml,而是試圖僅通過 sed 或 awk 替換出現的內容。

這可能對你有用(GNU sed):

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

從匹配和替換文件創建一個替換命令(首先引用所有換行符)。 然后對源文件應用該命令。

還要考慮這個 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM