使用sed命令替换自然数的间隔

使用sed命令替换自然数的间隔,sed,Sed,如何使用sed命令将24到88之间的或224到239之间的所有数字替换为文本“[数字X不可用]”。这些数字在文本文件中,与0到500之间的其他数字和其他字符混合在一起 请注意,如果文本包含字符串“124”,则sed不能替换为“1[24号不可用]”,但x24w必须替换为“x[24号不可用]”sed不是正确的工具。我会使用perl。以下是用于替换11和14之间的数字的代码段: 生成一些测试数据: seq 10 15 | xargs -I N echo abcNdef12x123yz abc10d

如何使用sed命令将24到88之间的或224到239之间的所有数字替换为文本“[数字X不可用]”。这些数字在文本文件中,与0到500之间的其他数字和其他字符混合在一起


请注意,如果文本包含字符串“124”,则sed不能替换为“1[24号不可用]”,但x24w必须替换为“x[24号不可用]”

sed不是正确的工具。我会使用perl。以下是用于替换11和14之间的数字的代码段:

生成一些测试数据:

seq 10 15 | xargs -I N echo  abcNdef12x123yz 
abc10def12x123yz
abc11def12x123yz
abc12def12x123yz
abc13def12x123yz
abc14def12x123yz
abc15def12x123yz
现在用perl替换它:

seq 10 15 | xargs -I N echo  abcNdef12x123yz | perl -ne 's/(\d+)/( ($1>10 && $1<15) ? "[Number $1 is not available]" : $1 )/ge;print'
abc10def[Number 12 is not available]x123yz
abc[Number 11 is not available]def[Number 12 is not available]x123yz
abc[Number 12 is not available]def[Number 12 is not available]x123yz
abc[Number 13 is not available]def[Number 12 is not available]x123yz
abc[Number 14 is not available]def[Number 12 is not available]x123yz
abc15def[Number 12 is not available]x123yz
这可能适用于您(GNU-sed):

sed-E的/[0-9]+/\n&\n/g;s/\/[Number&不可用]/g;s/\n//g'文件

这与数字24-29、30-79、80-88、224-229和230-239匹配。

不匹配。使用更好的工具,如
awk
。有关建议不使用sed的原因,请参阅。这是一个添加两个数字的示例,需要22行真正复杂的代码,因为您必须从实现数字的概念开始。请在您的问题中添加示例输入(无描述、无图像、无链接)和该示例输入所需的输出(无评论)。另外,请务必让我们知道为什么
24
被考虑用于
124
?它不应该被视为
124
本身吗?请在你的问题中也澄清一下这个问题。。。;打印“而不是
perl-pe”…”
?,直到并包括
~
smartmatch操作符。我赞成:
grep/$1/,(24..88224..239)?:只是因为我觉得它可读。谢谢你的提示。您知道grep是否会稍微慢一点,因为它会执行更多的比较操作吗?正确——相对于您的实现,grep会慢得离谱。
cat your_file | perl -ne 's/(\d+)/( ( $1 >= 24 && $1 <= 88 ) || ( $1 >= 224 && $1 <= 239 ) ? "[Number $1 is not available]" : $1 )/ge;print' > your_new_file
sed -E 's/[0-9]+/\n&\n/g;s/\<(2[4-9]|[3-7][0-9]|8[0-8]|22[4-9]|23[0-9])\>/[Number & is not available]/g;s/\n//g' file