![从长字符串的特定部分删除逗号](https://linux22.com/image/140349/%E4%BB%8E%E9%95%BF%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%89%B9%E5%AE%9A%E9%83%A8%E5%88%86%E5%88%A0%E9%99%A4%E9%80%97%E5%8F%B7.png)
我的文档包含代表解码信息的很长字符串,我想,
从字符串的最后部分删除逗号。例如,这是长字符串之一:
Insert into PE_ATRT_S(ID_ANA_TX,FQ_WQ_ASDF,ID_PRTY,NM_ATHY_TX,SC_RND,QU_DGT_RND) values (99990987868959,null,68,'T59 - %,Dsc,Itm-2 tax 1 Juris',4,5);
我想从它的最后部分删除逗号,所以让我放大以向您展示它的样子:
(99990987868959,null,68,'T59 - %,Dsc,Itm-2 tax 1 Juris',4,5);
所以最终结果如下所示:
Insert into PE_ATRT_S(ID_ANA_TX,FQ_WQ_ASDF,ID_PRTY,NM_ATHY_TX,SC_RND,QU_DGT_RND) values (99990987868959,null,68,'T59 - % Dsc Itm-2 tax 1 Juris',4,5);
请注意长字符串的最后一部分,其中没有逗号,让我们放大以更好地查看它:
(99990987868959,null,68,'T59 - % Dsc Itm-2 tax 1 Juris',4,5);
答案1
awk -F\' -vOFS=\' '{gsub(","," ",$2); print}'
答案2
替代解决方案gnu sed
:
sed -r 's/(\x27.*),(.*\x27)/\1 \2/g' file
\x27
:单引号的ascii码'
答案3
Perl 展示:
perl -pe "1 while s/'.*\K,(?=.*')/ /" input.txt
输出:
Insert into PE_ATRT_S(ID_ANA_TX,FQ_WQ_ASDF,ID_PRTY,NM_ATHY_TX,SC_RND,QU_DGT_RND) values (99990987868959,null,68,'T59 - % Dsc Itm-2 tax 1 Juris',4,5);
缩放输出:
(99990987868959,null,68,'T59 - % Dsc Itm-2 tax 1 Juris',4,5);
答案4
perl -pe "s/.*'\K(.*?)(?=')/\$1 =~ y|,| |r/e"
- 通过贪婪正则表达式跳到最后一对单引号。*
- 然后选择单引号之间的内容并将所有逗号转换为空格。