1

Вот структура моего файла:

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 ответ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 s в соответствии с ошибками 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .