簡體   English   中英

sed awk:在匹配字符串 B 的行中替換字符串 A

[英]sed awk: replace string A in lines matching string B

我試圖在包含另一個字符串 B 的行中替換字符串 A,該字符串必須被找到(A 和 B 之間存在可變內容,anyfile.html)。 例子:

font-size: 14px;"><a href="differentfilenames.html">1</a><br>

應該替換為

font-size: 14px; background-color: rgb(51, 204, 255);"><a href="differentfilenames.html">1</a><br>

bash / sed / awk 有解決方案嗎?

我提到的...... - 想象一個包含數字的矩陣矩陣 - 在上面提到的例子中為 1 - 數字是不同文件的錨點; 偶數 1 鏈接到不同的文件。 differentfilenames.html 是一個包含字母和數字的變量字符串 - 單元格應該根據它們包含的數字獲得背景顏色 - 所以:所有包含 1 作為錨點的單元格都應該獲得如上所示的背景顏色

在這種情況下,我嘗試找到能夠搜索字符串 B - 1</a><br>的解決方案,並且 - 如果為真 - 替換字符串 A

font-size: 14px;">

font-size: 14px; background-color: rgb(51, 204, 255);">

抱歉,我的第一個問題沒有正確轉義; 我想現在應該更清楚了......

我假設您有一個靜態輸入,其中換行符以您想要的方式分布。 就像肯特評論的那樣,這很容易打破。

這是一個 Perl 單行代碼:

perl -pe 'if (/1<\/a>/) { s/font-size: 14px;">/font-size: 14px; background-color: rgb(51, 204, 255);">/ }' yourfile.html

聽起來這就是您所需要的(使用 GNU awk 為第三個參數match() ):

$ cat tst.awk
BEGIN { split("rgb(51,234,567) rgb(52,345,678) rgb(53,456,789)",m) }
match($0,/(font-size: 14px;)("><a href="differentfilenames.html">([[:digit:]]+)<\/a><br>)/,a) {
    print a[1], "background-color:", m[a[3]] ";" a[2]
}

$ cat file
font-size: 14px;"><a href="differentfilenames.html">1</a><br>
font-size: 14px;"><a href="differentfilenames.html">3</a><br>
font-size: 14px;"><a href="differentfilenames.html">2</a><br>
font-size: 14px;"><a href="differentfilenames.html">3</a><br>

$ awk -f tst.awk file
font-size: 14px; background-color: rgb(51,234,567);"><a href="differentfilenames.html">1</a><br>
font-size: 14px; background-color: rgb(53,456,789);"><a href="differentfilenames.html">3</a><br>
font-size: 14px; background-color: rgb(52,345,678);"><a href="differentfilenames.html">2</a><br>
font-size: 14px; background-color: rgb(53,456,789);"><a href="differentfilenames.html">3</a><br>

但我必須自己編寫可測試的輸入,因為您沒有提供代表性的集合,所以這是一個猜測,無論您的真實輸入是什么樣子,您可能都需要自己對其進行按摩。

暫無
暫無

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

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