注意:我不知道如何在文本中插入制表符,我将其替换为 [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