0

sed s/regexFind/replacement/nそのため、行内の単語の n 番目の出現を置き換えるために使用する多くの解決策を見つけました。

例えばs/hello hello hello/world/2​​>hello world hello

ただし、私が探しているのは、ファイルに対する 3 番目の一致の発生を更新することです。

Hello
Hello
Hello
Hello
Hello

基本的にsed -i s/Hello/world/2 $filename、ファイルの内容を次のように置き換えることが期待されていました。

Hello
World
Hello
Hello
Hello

しかし、そうではありません。助言がありますか?

部分文字列を置き換えるファイルがUTF-8ではないため、Pythonスタイルの読み取りごとのソリューションを使用しないことを検討しています。

4

2 に答える 2

1

これは GNU awk の 1 つです。

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

ファイル全体を単一のレコードとして扱い、gensub2 番目の一致を置き換えます。

于 2018-10-12T05:39:59.210 に答える
0

ソリューション

このソリューションは Solaris 5.11 で動作します

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

注: これにより、スクリプト ファイルのアクセス許可が変更されます。次のコマンドを使用して権限を更新する必要がある場合があります。

chmod 777 script

ファイルのパーミッションの詳細については、ドキュメントを参照してください。

于 2018-10-19T03:42:55.797 に答える