我如何使用awk替换包含
的行 ifstream fin(fname);
到
ifstream fin(fname.c_str());
我尝试了以下awk,但它没有用。
/fin?fname?/ {
sub(/fname/, "fname.c_str()", $0)
}
{
print
}
答案 0 :(得分:4)
将其更改为以下(已测试):
awk '/fin\(fname\)/ {sub("fname", "fname.c_str()", $0)} {print}' input_filename
在awk的正则表达式匹配中,必须使用(
转义括号)
和\
此外,我认为您可能会混淆使用?
:这意味着Regular Expression vs. Globbing
?
表示“前面的字符是可选的”。例如abc?
匹配ab
和abc
?
表示“任何一个字符”。它的正则表达式等价于.
答案 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());