替换字符串例如:

替换字符串例如:

我需要使用 sed 来:

替换字符串例如:

tr("Text");

"text";

tr("Textfsafasfsfas safasdfsafas");

"Textfsafasfsfas safasdfsafas";

foo(tr("text"));foo("text");

不要替换这些字符串:

tr("text").arg(text);

tr("I am some text") .arg(i do stuff);

tr("I am some text") .arg(i do stuff) .arg(I also do stuff);

需要处理 1 到 n 行。

我当前的代码不涵盖多行.arg边缘情况。有什么好主意吗?

当前的 sed 代码:

sed -i '/\btr(/{ :a; s/\btr(\([^)]*\))\([^.]\)/\1\2/I; t; N; ba}' $file_t

编辑:

errors << tr("Error: Encountered an invalid token at line: %1, column: %2.") .arg(m_reader.lineNumber()) .arg(m_reader.columnNumber());

是一个边缘情况,目前仍然是一个问题。

答案1

$ cat ip.txt 
tr("Text");

tr("Textfsafasfsfas
safasdfsafas");

foo(tr("text"));

tr("text").arg(text);

tr("I am some text")
.arg(i do stuff);

tr("I am some text")
.arg(i do stuff)
.arg(I also do stuff);

tr("I am some text")
    .arg(i do stuff);

如果文件足够小,可以在将所有行作为单个字符串处理后保存在内存中,

$ perl -0777 -pe 's/\btr\(([^)]+)\)(?!\s*.arg)/$1/g' ip.txt 
"Text";

"Textfsafasfsfas
safasdfsafas";

foo("text");

tr("text").arg(text);

tr("I am some text")
.arg(i do stuff);

tr("I am some text")
.arg(i do stuff)
.arg(I also do stuff);

tr("I am some text")
    .arg(i do stuff);

如果输出没问题,请添加-i-i.bak选项进行就地编辑

编辑:

感谢@Costas 指出\n?\s*可以简化为\s*

相关内容