如何解决如何使用 sed/awk/tr 在 unix 环境中用另一个模式替换一个模式来维护它的值?
数据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 awk
的 gensub
函数,请尝试以下操作。
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 举报,一经查实,本站将立刻删除。