[英]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.