簡體   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