2012-03-07 45 views
2

我有一串字符串,看起来像这样的文件中删除空格这可能使用SED,如果是这样,我该怎么做到这一点?我想我必须使用分组和区域,但我无法弄清楚替换字符串。sed脚本从区域

这是我迄今为止

sed -n 's/new Tab("\(.*\)"/new Tab("\1")' 
+0

个个都是'新选项卡(“一些文本与SPAC es“)'? – user219882 2012-03-07 19:07:08

+0

它们可能包含也可能不包含空格,但它们将位于同一行中。 – 2012-03-07 19:10:16

回答

4

这个方案并不完美:它假定行只包含new Tab("some string blah blah blah"),没有别的该行上。这里是我的* remove_space.sed:*

/new Tab/ { 
    s/ *//g 
    s/newTab/new Tab/ 
} 

要调用:

sed -f remove_space.sed data.txt 

第一次换人盲目地删除所有空格,第二把后面标签之间的空间。

你不必把这个文件,脚本命令行的作品,以及:

sed '/new Tab/s/ *//g;s/newTab/new Tab/' data.txt 
+0

还要注意,字符串的第一个字符是小写字母。 – 2012-03-07 19:38:43

+0

非常感谢 – 2012-03-07 21:06:14

0

我首先想到的是用AWK但我想出了东西,我真的不喜欢:

echo "new Tab(\"Hello World\")" | gawk 'match($0, /new Tab\("(.*)"\)/, r) {print r[1]}' | sed -e 's/ *//g' 
+1

'match'(一个数组)的第三个参数是一个GNU awk扩展,所以需要'gawk'。 – 2012-03-07 19:34:41

+0

你说得对。抱歉。纠正。 – rui 2012-03-07 19:49:49

2

我不够一个SED大师,但这里的一块的Perl:

perl -pe 's/(?<=new Tab\(")[^"]+/ lcfirst(join("", split(" ", $&))) /e' 
+0

sed不支持负向lookbehind,所以它可能无法在sed中使用此技术。 – Sorpigal 2012-03-07 19:31:59

+0

我同意,特别是因为我评估替换字符串作为代码。 – 2012-03-07 19:40:41