我正在尝试创建一个文件,其中包含1到100之间的所有数字,每个数字都在一行中,但7的所有倍数都替换为7:
...
12
13
7
15
16
...我当前的代码如下,但是sed命令不能很好地工作,
$sudo seq 1 100 | sed -e 's/$?{%7==0}/7/g' > check.txt应该如何在sed中编写数学运算
发布于 2019-12-10 02:46:09
您不能在sed中进行算术运算,但您可以使用现有功能在某种程度上实现它们,例如:
seq 100 | sed '7~7s/.*/7/'对于awk,这将是:
awk 'BEGIN { for (i=1;i<=100;i++) print i%7?i:7 }'发布于 2019-12-10 02:50:47
Sed不能做算术,但是Perl可以。它还可以执行序列,因此不需要seq和管道:
perl -le 'print $_ % 7 ? $_ : 7 for 1 .. 100'它使用求值条件的ternary operator ?: (这里是$_ % 7,即模),如果为真,则返回第二个参数,否则返回第三个参数。-l会为每个print添加一个换行符。
发布于 2019-12-10 03:08:35
I love sed,但我认为这更多的是awk的工作
seq 1 100 | awk '{ if ($1 % 7 == 0) { print 7; } else { print $0; } }'https://stackoverflow.com/questions/59254844
复制相似问题