我必须为' _ '替换字符'。',但仅限于文件的特定区域(函数名称),我有一个像这样:
.destroy()
我正在考虑使用notepad ++或sed,并且只替换捕获的组,例如第一行是:
\name{function.name.something}
\usage{function.name.something(parameter.something, parameter2.something)}
并替换为\\name\{(.+)\}
但第1组( \ 1 )将下划线替换为下划线
感谢您的帮助,谢谢
答案 0 :(得分:1)
使用gnu-awk
:
awk -v FPAT='\\\\name{[^}]+}|\\S+' '{gsub(/\./, "_", $1)} 1' file
\name{function_name_something}
\usage{function.name.something(parameter.something, parameter2.something)}
FPAT='\\\\name{[^}]+}|\\S+'
将使用给定的正则表达式解析每个字段,这是\name{...}
或一些非空格字符串(默认的awk字段)。
更多测试:
cat file
\name{function.name.something} abc.foo.bar
\usage{function.name.something(parameter.something, parameter2.something)}
awk -v FPAT='\\\\name{[^}]+}|\\S+' '{gsub(/\./, "_", $1)} 1' f
\name{function_name_something} abc.foo.bar
\usage{function_name_something(parameter_something, parameter2.something)}
答案 1 :(得分:1)
Perl解决方案:
< file.txt perl -pe '
($n, $f) = /(\\name|\\usage)\{(.*?[}(])/
and s/\Q$n\E\{\Q$f\E/"$n\{" . ($f=~s=\.=_=gr)/e'
需要Perl 5.14+,否则你必须写
($n, $f) = /(\\name|\\usage)\{(.*?[}(])/
and s/\Q$n\E\{\Q$f\E/"$n\{" . do { ($ff = $f) =~ s=\.=_=g; $ff }/e