次のような文字列を含むファイルがたくさんあります。
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個以上の場合(
に変更します)
。