Bash 删除字符串中单引号后的空格(使用awk或sed)
以下是输入文件:Bash 删除字符串中单引号后的空格(使用awk或sed),bash,awk,sed,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?对于gawk,您可以使用gensub: $ cat q.txt select a, b,c, a1 as ' value1 '
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;
通过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,因为basic和扩展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
我很难使用sed,因为basic和扩展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
您的示例和描述不匹配。您所需的输出中删除的空格比引号中的要多。@user161778:我只考虑带引号的字符串…忽略其他空格..当我运行第一个脚本时,我遇到了错误..当我删除引号之间的空格时…查询运行得非常好..不知道确切的原因您为此尝试了什么吗?如果是的话,展示一下你的尝试。如果没有,请先这样做。您的示例和描述不匹配。您所需的输出中删除的空格比引号中的要多。@user161778:我只考虑带引号的字符串…忽略其他空格..当我运行第一个脚本时,我遇到了错误..当我删除引号之间的空格时…查询运行得非常好..不知道确切的原因您为此尝试了什么吗?如果是的话,展示一下你的尝试。如果不是,请先这样做。如果在尾随引号之前的值后面有多个空格(例如,
'value……。
,其中点是空格),则子表达式将包括除最后一个空格以外的所有空格。是的,这是真的,因此尾随的+
是多余的。尝试避免这种情况的一个明显方法是在括号表达式中包含空格,但如果value[N]
可能包含空格,则该方法将失败。我们将不得不等待OP告诉我们他们的输入是否与他们发布的内容不完全匹配。非常好。我同意---由OP决定需要解决的各种可能的输入案例(他或她可能已经做了)。如果在尾随引号之前的值后面有多个空格(例如,“value…”。
,其中点是空格)子表达式将包含除最后一个空格以外的所有空格。是的,这是正确的,因此尾部的+
是多余的。尝试避免这种情况的一个明显方法是在括号表达式中包含空格,但如果value[N]
可能包含空格,则该方法将失败。我们将不得不等待OP告诉我们他们的输入是否与他们发布的内容不完全匹配。非常好。我同意——这取决于OP提出需要解决的各种可能的输入案例(他或她可能已经做了)。