awk を使用して、次を含む行を置き換えるにはどうすればよいですか
ifstream fin(fname);
に
ifstream fin(fname.c_str());
次の awk を試しましたが、うまくいきませんでした。
/fin?fname?/ {
sub(/fname/, "fname.c_str()", $0)
}
{
print
}
次のように変更します (テスト済み)。
awk '/fin\(fname\)/ {sub("fname", "fname.c_str()", $0)} {print}' input_filename
awk の正規表現マッチングでは、括弧(
and)
をエスケープする必要があります\
さらに、次の使用を混乱させている可能性があると思います。これは、正規表現とグロビング?
の間で異なることを意味します
?
は、「前の文字はオプション」を意味します。たとえば、とabc?
の両方に一致します。ab
abc
?
は、「任意の 1 文字」を意味します。その正規表現に相当するものは.
> echo "ifstream fin(fname);" | awk '/ifstream fin\(fname\)/{gsub(/fname/,"fname.c_str()")}1'
ifstream fin(fname.c_str());