这是我的文件结构:
g-4.n.g.fr 10.147.243.63 g-4.n.g.fr-w1
这是我的脚本:
#! /bin/sh
ip=10.147.243.63
worker=$(grep -e $ip $1 | awk '{ print $3; }')
echo "[Hostname: ]"
echo $worker
echo "[Before concat]"
echo $worker
echo "[After concat]"
echo "$worker.v.1"
我有这个输出:
[Hostname: ]
g-4.n.g.fr-w1
[Before concat]
g-4.n.g.fr-w1
[After concat]
.v.1n.g.fr-w1
我想要的是没有替换.v.1
之后的结果g-4.n.g.fr-w1
,如下所示:
g-4.n.g.fr-w1.v.1
我如何修改我的脚本以获得此输出?
答案1
弹奏琴弦或琴弦部件时产生奇怪的结果
首先,测试你的行尾:
$ file test.txt
test.txt: ASCII text, with CRLF line terminators
如果你得到上述内容,但实际上不想要DOS
行尾,你可以使用dos2unix
工具:
$ dos2unix test.txt
dos2unix: converting file test.txt to Unix format ...
$ file test.txt
test.txt: ASCII text
好的,我的数据格式一致
您的脚本应该或多或少按照预期工作(它在这里):
[Hostname: ]
g-4.n.g.fr-w1
[Before concat]
g-4.n.g.fr-w1
[After concat]
g-4.n.g.fr-w1.v.1
如果不起作用,请尝试:
printf "%s.v.1" "$worker"
我建议修改你的脚本,以明确你正在使用grep
在文件中搜索字符串,并echo $var
根据Bash 陷阱:
ip="10\.147\.243\.63"
worker=$(grep -e $ip $1 | awk '{ print $3; }')
printf "[Hostname: ]\n"
printf '%s\n' "$worker"
printf "[Before concat]\n"
printf '%s\n' "$worker"
printf "[After concat]\n"
printf '%s.v.1\n' "$worker"