有条件地用字替换数字

时间:2015-03-20 18:41:30

标签: linux shell terminal

我使用Python脚本每2分钟检测一次本地网络中的连接设备 - 将输出保存在文件中(我只保存最后一个ip号码)。

这是我的代码:

import os
os.system('for ip in $(seq 1 10); do ping -c 1 192.168.1.$ip>/dev/null; '
          '[ $? -eq 0 ] && echo "$ip" || : ; '
          'done > /home/pi/Desktop/Network/logs/logLocal.txt')

输出结果例如:

1
2
4
7

我现在的问题是,是否可以通过单词替换数字7? 如果发现设备7,则程序写入"七"文件中没有7个。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

以下脚本将完成这项工作:

# Note that you can use `{a..b}` instead of `seq`
for ip in {1..10} ; do
   # No need to execute the command and then check it's
   # return value. You can do it in one line
   if ping -c 1 192.168.1.$ip > /dev/null ; then
      # check for `7`
      if [ "$ip" = "7" ] ; then
          echo "seven"
      else if [ "$ip" = 5 ] ; then
          echo "five"

      # ... and so on

      else
          echo "$ip"
      fi
   fi
done > output.txt

答案 1 :(得分:1)

如果ping不成功,

check_call将引发CalledProcessError,因此我们可以捕获该异常并且什么也不做,如果ping成功,我们使用{的最后一位来写dict中的值{1}}作为关键。

ip

答案 2 :(得分:1)

我会这样做:

  • 将所有“数字字”对存储在num name
  • 文件中
  • 阅读文件
  • ping号码
  • 如果成功,则回显姓名

脚本:

devices="./dev"
while read -r num name
do
    ping -c 1 -t1 192.168.1.$num >/dev/null 2>&1  && echo "$name up"
done < "$devices"

btw,稍加修改,您可以直接使用/etc/hosts;)

同样使用nmapfpingarp可能会更快,因为按顺序ping每个IP ...

答案 3 :(得分:0)

这看起来像os.system()中的Unix命令。因此,您只需将结果通过replace传递给文件:

import os
os.system('for ip in $(seq 1 10); do ping -c 1 192.168.1.$ip>/dev/null; '
      '[ $? -eq 0 ] && echo "$ip" || : ; '
      'done | replace 7 seven > /home/pi/Desktop/Network/logs/logLocal.txt')

有关replace的更多信息,请参阅here