微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 sed/awk/tr 在 unix 环境中用另一个模式替换一个模式来维护它的值?

如何解决如何使用 sed/awk/tr 在 unix 环境中用另一个模式替换一个模式来维护它的值?

我在一个文件(.txt 文件)中设置了以下数据

数据1 = 275736 490;数据11 = 87551 1004;数据 2 = 344670 4875; data3 = 472996 840;data4 = 0 0;data = 19708 279;data6 = 10262 18;data7 = 0 0;data8 = 428 6;data9 = 5986 11;data10 = 15114 =156;data301 = 156;data10

我想将此数字空格数字模式(例如472996 840)替换为数字,数字模式(472996,840 )。这必须为 0 0 也为 0,0 完成。值不应更改。我无法替换所有空格,因为还需要其他空格。我必须将数字之间的空格替换为另一个字符串。

使用 tr/sed/awk 有什么建议吗?

试过了:

sed -i 's/\d+\s\d+/\d+\d+/g' comment3.txt 

此外,在 tr 中,我们似乎无法匹配模式

解决方法

一个简单的方法是捕获空格前的数字和它后面的数字,然后使用第一个和第二个反向引用 \1\2 重新插入数字,中间用逗号隔开。您将使用 sed 's/find/replace/' 添加 g 的正常替换形式使替换全局(替换全部)。例如:

sed -E 's/([0-9])[ ]([0-9])/\1,\2/g' file

这将需要您的数据,例如

data1 = 275736 490;data11 = 87551 1004; data2 = 344670 4875; data3 = 472996 840;...

并将该行转换为:

data1 = 275736,490;data11 = 87551,1004; data2 = 344670,4875; data3 = 472996,840;...

当您满意时,您可以将 -i 添加到“就地编辑”中。

,

第一个解决方案: 使用 GNU awkgensub 函数,请尝试以下操作。

awk '
{
  print gensub(/([0-9]+) +([0-9]+)/,"\\1,\\2","g",$0)
}
' Input_file


第二个解决方案:使用 GNU awk,您也可以尝试以下操作。

awk -v RS='[0-9]+[[:space:]]+[0-9]+' '{sub(/[[:space:]]+/,",RT);ORS=RT} 1' Input_file

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。