簡體   English   中英

sed/awk/grep/perl... 用於在文件中查找文件內容的腳本,如果匹配則將其更改為另一個文件的內容

[英]sed/awk/grep/perl... script to look for file content within files and if matched to change it to the content of another file

我需要在單行 HTML/JS 生成的文件上查找和替換內聯 svg 代碼。

我看到許多 sed 和/或 awk 腳本的示例,用於在另一個文件中匹配文件的內容,但我遇到了兩個問題:我無法弄清楚如何用第三個文件的內容或搜索來替換匹配的文件僅當整行與文件匹配時才有效(正在搜索的文件是單行 html,所有代碼都粘在一起......)。

把它放在簡單的偽代碼中,我正在尋找的是:

IF oldImage.svg IS MATCHED IN file.html THEN REPLACE MATCHED TEXT BY newImage.svg

我知道整個 svg 文件在 html 文件中匹配,因為我已經成功運行了grep -wFf oldImage.svg file.html

此外,如果該解決方案可以對子文件夾中的所有文件進行遞歸,那將是一個很大的優勢。

.

更新:

@anubhava 要求的示例

舊圖片.svg

<svg>old file graphics...</svg>

新圖片.svg

<svg>great new graphics...</svg>

file.html(在腳本之前)

<html>
<head>
<title> example </title>
</head>
<body>
<svg>old file graphics...</svg>
</body>
</html>

file.html(運行腳本后)

<html>
<head>
<title> example </title>
</head>
<body>
<svg>great new graphics...</svg>
</body>
</html>

(請記住,我為可讀性編寫了一個多行示例,但我打算使用它的 HTML 代碼全部粘在一行上,或者至少在同一行上有幾個不同的標簽)

awk '
ARGIND == 1 { old=$0 }
ARGIND == 2 { new=$0 }
ARGIND == 3 {
    if ( s = index($0,old) ) {
        $0 = substr($0,1,s-1) new substr($0,s+length(old))
    }
    print
}
' oldImage.svg newImage.svg file.html

上面使用 GNU awk 作為 ARGIND,如果你沒有在頂部添加一行說:

FNR == 1 { ARGIND++ }

暫無
暫無

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

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