使用awk替换包含模式“fin(fname)”的行

时间:2012-12-20 19:58:25

标签: regex awk

我如何使用awk替换包含

的行
    ifstream fin(fname);

    ifstream fin(fname.c_str());

我尝试了以下awk,但它没有用。

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

3 个答案:

答案 0 :(得分:4)

将其更改为以下(已测试):

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

在awk的正则表达式匹配中,必须使用(转义括号)\

此外,我认为您可能会混淆使用?:这意味着Regular Expression vs. Globbing

之间的不同之处
  • 在正则表达式中,?表示“前面的字符是可选的”。例如abc?匹配ababc
  • 在globbing中,?表示“任何一个字符”。它的正则表达式等价于.

答案 1 :(得分:1)

改为使用sed:

sed 's/fin(fname)/fin(fname.c_str())/' file

答案 2 :(得分:0)

> echo "ifstream fin(fname);" | awk '/ifstream fin\(fname\)/{gsub(/fname/,"fname.c_str()")}1'
ifstream fin(fname.c_str());