【问题标题】:How can I replace a character on specific strings on a file?如何替换文件中特定字符串的字符?
【发布时间】:2015-09-24 13:52:25
【问题描述】:

我必须将字符 '.' 替换为 '_' 但仅限于文件的特定区域(函数名称),我有一个类似的文件这个:

\name{function.name.something}

\usage{function.name.something(parameter.something, parameter2.something)}

我正在考虑使用 notepad++ 或 sed,并且只替换捕获的组,例如第一行是:

\\name\{(.+)\} 并替换为\\name\{\1\}

group 1 (\1) 将点替换为下划线

感谢您的帮助并感谢您

【问题讨论】:

  • 如果你有\usage{function1.name(function2.name(param1.var), param2.var)怎么办?

标签: regex perl awk sed notepad++


【解决方案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)}

【讨论】:

  • 非常感谢!它工作得很好。再次感谢您
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2022-06-16
    • 2021-01-02
    相关资源
    最近更新 更多