在 'grep' 之后将字符串与变量连接起来

在 'grep' 之后将字符串与变量连接起来

这是我的文件结构:

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"

相关内容