在括号之间的单词周围插入空格

Insert spaces around words between parentheses

我有一个名为 sso-shop-med.txt 的文件。

insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by)values('204026601',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by)values('502689031',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by)values('502683504',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009239', 18, TRUE, current_date, '212585704', current_date, '212585704'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009292', 18, TRUE, current_date, '212585704', current_date, '212585704');

我想在 )values( 之间添加一个空隙,如下所示:) values (

我已经编写了以下 awk 命令,但它不起作用

awk '{gsub(/")values("/, ") values (" ); print}' sso-shop-med.txt

产生的错误:

awk: syntax error in regular expression ")values(" at values("
 source line number 1
 context is
    {gsub(/")values("/, ") values (" >>>  ) <<< 

我不确定你的 awk 版本,但这似乎有效:

awk '{gsub("\)values\(", "\) values \(") ; print}'

insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by)values('204026601',18, TRUE, current_date,'502675409',current_date,'502675409');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by)values('502689031',18, TRUE, current_date,'502675409',current_date,'502675409');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by)values('502683504',18, TRUE, current_date,'502675409',current_date,'502675409');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009239', 18, TRUE, current_date, '212585704', current_date, '212585704');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009292', 18, TRUE, current_date, '212585704', current_date, '212585704');

进入:

insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204026601',18, TRUE, current_date,'502675409',current_date,'502675409');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('502689031',18, TRUE, current_date,'502675409',current_date,'502675409');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('502683504',18, TRUE, current_date,'502675409',current_date,'502675409');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009239', 18, TRUE, current_date, '212585704', current_date, '212585704');
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009292', 18, TRUE, current_date, '212585704', current_date, '212585704');

看起来怎么样?

在正则表达式中,您需要转义括号并去掉引号:

$ cat file
last_updated_by)values('204026601',
last_updated_by)values('502689031',
last_updated_by)values('502683504',
last_updated_by) values ('204009239',
last_updated_by) values ('204009292',

$ awk '{gsub(/\)values\(/, ") values (" ); print}' file
last_updated_by) values ('204026601',
last_updated_by) values ('502689031',
last_updated_by) values ('502683504',
last_updated_by) values ('204009239',
last_updated_by) values ('204009292',

gawk方法:

awk '{ gsub(/ *values */," values ",[=10=]) }1' sso-shop-med.txt

输出:

insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204026601',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('502689031',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('502683504',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009239', 18, TRUE, current_date, '212585704', current_date, '212585704'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009292', 18, TRUE, current_date, '212585704', current_date, '212585704');

  • gsub(/ *values */," values ",[=12=]) - 用leading/trailing白色[=34]替换/重新排列values =](如果 values 周围有多余的 spaces - 它们将被挤压,如果 values 附近的任何一侧都没有 space(s) - 它们将添加)

您必须使用 \ 转义括号,因为它们是正则表达式中的控制字符。

虽然我通常像锤子一样使用 awk,但我觉得 sed 在这里更合适:

sed s/\)values\(/\)\ values\ \(/g sso-shop-med.txt

在 UNIX 中使用 Perl,可以解决这个问题。

use strict;
use warnings;
while(<>){
print if(s/\((values)\)/\  \/);
}

输出:

insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204026601',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('502689031',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('502683504',18, TRUE, current_date,'502675409',current_date,'502675409'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009239', 18, TRUE, current_date, '212585704', current_date, '212585704'); 
insert into brs.user_shops (user_name, shop_id, is_active, created_date, created_by, last_updated_date, last_updated_by) values ('204009292', 18, TRUE, current_date, '212585704', current_date, '212585704');