在bash,sed中,我该如何搜索/替换此行:
var = ["bla bla, doodoo"];
带
var blabla = ["bla bla, doodoo"];
blabla
和doodoo
可以是任何内容(每个都有一个或多个单词) -
我想复制["
和,
之间的部分,并在=
之后粘贴。
此外,我需要删除复制部分中的任何空格......
任何帮助将不胜感激!
答案 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"];