如何在使用 sed/awk/tr 维护其值的 unix 环境中用另一个模式替换一个模式?
How to substitute a pattern with another pattern in unix enviroment maintianing its values using sed/awk/tr?
我在一个文件(.txt 文件)中有以下数据集
数据 1 = 275736 490;数据 11 = 87551 1004;数据 2 = 344670 4875;数据 3 = 472996 840;数据 4 = 0 0;数据 = 19708 279;数据 6 = 10262 18;数据 7 = 0 0;数据 8 = 428 6;数据 9 = 5986 11;数据 10 = 15114 173;数据 11 = 7483 106;数据 = 15900 25;
我想将此 digit space digit 模式(例如 472996 840)替换为 digit ,digit 模式 (472996,840)。对于 0 0 以及 0,0 都必须这样做。不应更改值。我无法替换所有白色 space,因为还需要其他白色 space。我必须将数字之间的白色 space 替换为另一个字符串。
使用 tr/sed/awk 有什么建议吗?
试过这个:
sed -i 's/\d+\s\d+/\d+\d+/g' comment3.txt
此外,在 tr 中我们似乎无法匹配模式
一个简单的方法是捕获 space 之前的数字和它后面的数字,然后使用第一个和第二个反向引用 </code> 和 <code>
。您可以使用 sed 's/find/replace/'
添加 g
的正常替换形式来进行全局替换(全部替换)。例如:
sed -E 's/([0-9])[ ]([0-9])/,/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", [=10=])
}
' Input_file
第二个解决方案: 使用 GNU awk
,您也可以尝试以下操作。
awk -v RS='[0-9]+[[:space:]]+[0-9]+' '{sub(/[[:space:]]+/,",",RT);ORS=RT} 1' Input_file
我在一个文件(.txt 文件)中有以下数据集
数据 1 = 275736 490;数据 11 = 87551 1004;数据 2 = 344670 4875;数据 3 = 472996 840;数据 4 = 0 0;数据 = 19708 279;数据 6 = 10262 18;数据 7 = 0 0;数据 8 = 428 6;数据 9 = 5986 11;数据 10 = 15114 173;数据 11 = 7483 106;数据 = 15900 25;
我想将此 digit space digit 模式(例如 472996 840)替换为 digit ,digit 模式 (472996,840)。对于 0 0 以及 0,0 都必须这样做。不应更改值。我无法替换所有白色 space,因为还需要其他白色 space。我必须将数字之间的白色 space 替换为另一个字符串。
使用 tr/sed/awk 有什么建议吗?
试过这个:
sed -i 's/\d+\s\d+/\d+\d+/g' comment3.txt
此外,在 tr 中我们似乎无法匹配模式
一个简单的方法是捕获 space 之前的数字和它后面的数字,然后使用第一个和第二个反向引用 </code> 和 <code>
。您可以使用 sed 's/find/replace/'
添加 g
的正常替换形式来进行全局替换(全部替换)。例如:
sed -E 's/([0-9])[ ]([0-9])/,/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", [=10=])
}
' Input_file
第二个解决方案: 使用 GNU awk
,您也可以尝试以下操作。
awk -v RS='[0-9]+[[:space:]]+[0-9]+' '{sub(/[[:space:]]+/,",",RT);ORS=RT} 1' Input_file