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 的正则表达式匹配中,括号()必须用\

此外,我认为您可能会混淆: 这意味着正则表达式与通配符?之间的不同含义

  • 在正则表达式中,?表示“前面的字符是可选的”。例如abc?同时匹配ababc
  • 在通配符中,?意思是“任何一个字符”。它的正则表达式等价物是.
于 2012-12-20T20:07:03.763 回答
1

使用 sed 代替:

sed 's/fin(fname)/fin(fname.c_str())/' file
于 2012-12-20T20:13:52.133 回答
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 回答