在字符串中单引号后删除空格(使用awk或sed)

时间:2016-04-13 14:01:42

标签: bash awk sed

以下是输入文件:

select a, b,c, a1 as ' value1 ', a2 as ' value2 ', d from table1;

给定文件可以包含任意数量的别名。我想删除引号之间的空格。 所需的输出是:

select a,b,c, a1 as 'value1', a2 as 'value2',d from table1;

是否可以使用awk或sed?

3 个答案:

答案 0 :(得分:2)

使用gawk,您可以使用gensub

$ cat q.txt
select a, b,c, a1 as ' value1 ', a2 as ' value2 ', d from table1;

$ cat q.awk
{ print gensub(/' *([^' ]+) *'/, "'\\1'", "g") }

$ gawk -f q.awk q.txt
select a, b,c, a1 as 'value1', a2 as 'value2', d from table1;

答案 1 :(得分:2)

$ sed -r "s/' +([^']*) +'/'\1'/g" file
select a, b,c, a1 as 'value1', a2 as 'value2', d from table1;

答案 2 :(得分:0)

我很难使用sed,因为基本和扩展的Posix / GNU都不能识别非贪婪量词?。无论如何,如果你可以使用perl,这是一种方法:

perl -pe "s/'\s*(.*?)\s*'/'\1'/g" input_file.txt

编辑:

啊,是的,我喜欢@edmorton给出的解决方案。您可以使用[^'*]代替贪婪量词?。所以要使用sed,你可以这样做:

sed -r "s/'\s+([^']*)\s+'/'\1'/g" input_file.txt