簡體   English   中英

替換文件中的第N個字符串匹配

[英]Replace Nth String Match In File

因此,我發現了許多使用sed s/regexFind/replacement/n替換一行中第n個單詞的解決方案。

例如s/hello hello hello/world/2 > hello world hello

但是,我要執行的操作是更新文件的第三次匹配更新。

Hello
Hello
Hello
Hello
Hello

基本上,期望是sed -is/Hello/world/2 $filename將替換文件內容為:

Hello
World
Hello
Hello
Hello

然而,這種情況並非如此。 有什么建議么?

我希望不要使用Python樣式的全行讀取解決方案,因為我希望替換子字符串的文件不是UTF-8。

這是GNU awk中的一個:

$ awk 'BEGIN{RS=/^$/;ORS=""}$0=gensub(/Hello/,"World",2)' file 
Hello
World
Hello
Hello
Hello

它將整個文件視為單個記錄,並且gensub替換了第二個匹配項。

解決方案

此解決方案適用於Solaris 5.11

Perl perl-pe 's{Hello}{++$n == 2 ? $& : "World"}ge\\' script > tmp && mv tmp script perl-pe 's{Hello}{++$n == 2 ? $& : "World"}ge\\' script > tmp && mv tmp script

注意:這將更改腳本文件的權限。 您可能需要使用以下命令來更新權限:

chmod 777 script

有關文件權限的更多信息,請查看文檔

暫無
暫無

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

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