Ответ 1
Позвольте мне представить вам awk
:
$ awk '/Device/ {print $2}' file
name1
name2
name3
Это печатает второе поле в строках, содержащих Device
. Если вы хотите проверить, что они начинаются с устройства, вы можете использовать ^Device:
.
Update
Чтобы получить вывод, который вы упомянули в своем отредактированном вопросе, используйте это:
$ awk -v var="MainComputer" '/Device/ {print var, "->", $2}' a
MainComputer -> name1
MainComputer -> name2
MainComputer -> name3
Он предоставляет имя переменной через -v
, а затем печатает строку.
Найдите несколько комментариев относительно вашего script:
file="/scripts/file.txt"
while read -r line
do
if [$variable="Device"]; then # where does $variable come from? also, if condition needs tuning
device='echo "$line"' #to run a command you need `var=$(command)`
echo $device #this should be enough
fi
done <file.txt #why file.txt if you already stored it in $file?
Проверьте bash равенство строк, чтобы увидеть, как [[ "$variable" = "Device" ]]
должен быть синтаксисом (или похожим).
Кроме того, вы можете сказать while read -r name value
, так что $value
будет содержать от второго значения.