特定の単語を削除し、ファイルの文字列の末尾に単語を設定します。

特定の単語を削除し、ファイルの文字列の末尾に単語を設定します。

次のような文字列を含むファイルがたくさんあります。

Get<1>(abc)
Get<2>(xyz)

上記のパターンを使用してすべてのファイルを再帰的に検索し、最初の「(」の前にあるすべてのファイルを削除し、その後に文字列を入れるにはどうすればよいですか?

希望の出力:

abc.val()
xyz.val()

abc と xyz は何でも変更でき、「<」と「>」の間の数字は重要ではありません。

編集する:

ファイル拡張子は.ccと.hです。

また、文字列は常にGetで始まります。

ベストアンサー1

GNUを使用してgrepパターンを複数回含むファイルを見つけ、GNUを使用してsed内部置換を実行できます。

ere='Get<[[:digit:]]+>\(([[:alnum:]_]+)\)'
grep -rlEZe "$ere" . |
  xargs -r0 sed -i -E "s/$ere/\1.val()/g"

これは[[:alnum:]_]+、1 つ以上の英数字または下線のシーケンスと一致します。[^()]*またはを除く文字が0個以上の場合(に変更します)

おすすめ記事