在bash,sed中,我该如何搜索/替换它:var = [“blabla,doodoo”]; by var blabla = [blabla,doodoo“];

时间:2017-07-05 15:52:26

标签: bash search text sed replace

在bash,sed中,我该如何搜索/替换此行:

var = ["bla bla, doodoo"]; 

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

blabladoodoo可以是任何内容(每个都有一个或多个单词) -

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

此外,我需要删除复制部分中的任何空格......

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

试试这个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"]; 

答案 1 :(得分:0)

使用GNU awk为第3个arg匹配(),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"];