1

awk を使用して、次を含む行を置き換えるにはどうすればよいですか

    ifstream fin(fname);

    ifstream fin(fname.c_str());

次の awk を試しましたが、うまくいきませんでした。

    /fin?fname?/ {
       sub(/fname/, "fname.c_str()", $0)
    }
    {
      print
    }
4

3 に答える 3

4

次のように変更します (テスト済み)。

awk '/fin\(fname\)/ {sub("fname", "fname.c_str()", $0)} {print}' input_filename

awk の正規表現マッチングでは、括弧(and)をエスケープする必要があります\

さらに、次の使用を混乱させている可能性があると思います。これは、正規表現とグロビング?の間で異なることを意味します

  • 正規表現で?は、「前の文字はオプション」を意味します。たとえば、とabc?の両方に一致します。ababc
  • グロビングで?は、「任意の 1 文字」を意味します。その正規表現に相当するものは.
于 2012-12-20T20:07:03.763 に答える
0
> echo "ifstream fin(fname);" | awk '/ifstream fin\(fname\)/{gsub(/fname/,"fname.c_str()")}1'
ifstream fin(fname.c_str());
于 2012-12-21T05:35:56.713 に答える