剪切命令在脚本中不按制表符分隔

剪切命令在脚本中不按制表符分隔

注意:我不知道如何在文本中插入制表符,我将其替换为 [tab]

我有一个由表格分隔的列表文件名值:

host1[tab]ip1
host2[tab]ip2
host3[tab]ip3
host4[tab]ip4

默认分隔符cut是 [tab],当我执行以下操作时:

cut -f1 < file
cut -f2 < file

我如愿得到了我的主机和 IP。但它在我的脚本中不起作用

while read line
do
  machine=$(echo $line | cut -f1)
  ip=$(echo $line | cut -f2)
  echo "$machine : is my hostname & $ip : is my @IP"
done < file

它实际上将整行放入$line变量中。我也尝试过但没有取得更大的成功:

machine=$(echo $line | cut -d$'\t' -f1)
ip=$(echo $line | cut -d$'\t' -f1)

但是当我用文件中的空格替换表格并修改我的代码时:

machine=$(echo $line | cut -d' ' -f1)
ip=$(echo $line | cut -d' ' -f1)

它按预期工作。

我想知道为什么第一个结果与预期不同,因为它在脚本之外的 CLI 上工作。

我的Linux版本:

Linux yolo 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

预先感谢您的阅读和帮助。

答案1

在这种情况下,您可以去掉cut并直接读取主机名和地址:

#!/bin/sh

while read -r machine ip
do
  printf '%s : is my hostname & %s : is my @IP\n' "$machine" "$ip"
done < file

exit 0

相关内容