【问题标题】:in bash, sed, how can I search/replace this: var = ["blabla, doodoo"]; by var blabla = [blabla, doodoo"];在 bash、sed 中,我如何搜索/替换它: var = ["blabla, doodoo"]; by var blabla = [blabla, doodoo"];
【发布时间】:2017-12-09 09:33:38
【问题描述】:

在 bash、sed 中,我如何搜索/替换这一行:

var = ["bla bla, doodoo"]; 

var blabla = ["bla bla, doodoo"];

blabladoodoo 可以是任何东西(每个单词一个或多个) -

我想复制[", 之间的部分并粘贴到= 之后。

还有,我需要删除复制部分中的所有空格...

任何帮助将不胜感激!

【问题讨论】:

  • 你有什么办法解决这个问题?使用sed,您可以使用捕获组和反向引用来解决它..

标签: bash search text sed replace


【解决方案1】:

试试这个 awk 单行代码:

awk -F'[",]' '{x=$2;gsub(/ /,"",x);sub(/=/,x" =")}7' file

用你的例子:

kent$  awk -F'[",]' '{x=$2;gsub(/ /,"",x);sub(/=/,x" =")}7'<<< 'var = ["bla bla, doodoo"]; '      
var blabla = ["bla bla, doodoo"]; 

如果您只想在 var = .... 行上进行替换,这意味着缺少变量名的行,您可以这样做:

awk -F'[",]' '/^\s*var\s*=/{x=$2;gsub(/ /,"",x);sub(/=/,x" =")}7' file

例子:

kent$  head f                                                               
var = ["bla bla, doodoo"];                                                  
var dontTouchMe = ["a b c, doodoo"];                                        
var  = ["chan g e M e, doodoo"];                                            

kent$  awk -F'[",]' '/^\s*var\s*=/{x=$2;gsub(/ /,"",x);sub(/=/,x" =")}7' f  
var blabla = ["bla bla, doodoo"];                                           
var dontTouchMe = ["a b c, doodoo"];                                        
var  changeMe = ["chan g e M e, doodoo"]; 

【讨论】:

  • 您应该提及\s 是gawk 特有的,或者改用[[:space:]]
  • 单线做到了!非常感谢。现在我要研究你的解决方案来理解它:-) 我从 grep 开始,遇到了 sed、tr 甚至 perl。解决方案似乎是 awk!
【解决方案2】:

使用 GNU awk 将第三个 arg 用于 match()、gensub() 和 \s:

$ awk 'match($0,/(.*var\s*)(=\s*\["([^,]+)(.*))/,a) {$0 = a[1] gensub(/\s/,"","g",a[3]) " " a[2]} 1' file
var blabla = ["bla bla, doodoo"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    相关资源
    最近更新 更多