我如何使用 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 的正则表达式匹配中,括号(
和)
必须用\
此外,我认为您可能会混淆: 这意味着正则表达式与通配符?
之间的不同含义
?
表示“前面的字符是可选的”。例如abc?
同时匹配ab
和abc
?
意思是“任何一个字符”。它的正则表达式等价物是.
使用 sed 代替:
sed 's/fin(fname)/fin(fname.c_str())/' file
> echo "ifstream fin(fname);" | awk '/ifstream fin\(fname\)/{gsub(/fname/,"fname.c_str()")}1'
ifstream fin(fname.c_str());