删除字符串中单引号后的空格(使用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有可能吗?

使用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;
$ sed -r "s/' +([^']*) +'/'1'/g" file
select a, b,c, a1 as 'value1', a2 as 'value2', d from table1;

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

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

 

编辑:

啊,是的,我喜欢埃德蒙顿给出的解决方案。您可以使用[^'*]而不是贪婪的量词?。所以要使用sed你可以做:

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

最新更新