繁体   English   中英

如果 bash 中的 number%7==0,如何用 sed 命令替换数字?

[英]How to replace a number with sed command if number%7==0 in bash?

我正在尝试创建一个文件,其中包含 1 到 100 之间的所有数字,每个数字都在一行中,但所有 7 的倍数都被 7 替换:

...
12
13
7
15
16
...

我当前的代码如下,但sed命令不能正常工作,

$sudo seq 1 100 | sed -e 's/$?{%7==0}/7/g' > check.txt

我应该如何在sed编写数学运算?

您不能在 sed 中进行算术运算,但您可以使用现有功能在一定程度上实现它们,例如:

seq 100 | sed '7~7s/.*/7/'

使用 awk 将是:

awk 'BEGIN { for (i=1;i<=100;i++) print i%7?i:7 }'

Sed 不能做算术,但 Perl 可以。 它也可以做一个序列,所以不需要seq和管道:

perl -le 'print $_ % 7 ? $_ : 7 for 1 .. 100'

它使用三元运算符?:评估条件(此处$_ % 7 ,即模数),如果为真则返回第二个参数,否则返回第三个参数。 -l为每个print添加一个换行符。

我喜欢sed ,但我认为这更像是awk的工作:

seq 1 100 | awk '{ if ($1 % 7 == 0) { print 7; } else { print $0; } }'

其实普通的bash也可以处理这个:

for i in $(seq 1 100); do (( i % 7 )) && echo $i || echo 7; done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM