以下是输入文件:
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?
答案 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