[英]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.