Читать строку, содержащую String (Bash)

У меня есть файл, и это примерно так:

Device: name1
random text
Device: name2
random text
Device: name3
random text

У меня есть переменная: MainComputer

Что я хочу получить (для каждого имени у меня есть как 40 имен):

   MainComputer -> name1
   MainComputer -> name2
   MainComputer -> name3

Что я имею:

var="MainComputer"   
var1=$(awk '/Device/ {print $3}' file)
echo "$var -> $var1"

Это дает только стрелку "->" и ссылку для первой переменной, я хочу их для остальных 40 переменных...

Спасибо, в любом случае!

2 ответа

Решение

Позвольте мне представить вам awk:

$ awk '/Device/ {print $2}' file
name1
name2
name3

Это печатает второе поле в строках, содержащих Device, Если вы хотите проверить, что они начинаются с устройства, вы можете использовать ^Device:,

Обновить

Чтобы получить результат, который вы упоминаете в отредактированном вопросе, используйте это:

$ awk -v var="MainComputer" '/Device/ {print var, "->", $2}' a
MainComputer -> name1
MainComputer -> name2
MainComputer -> name3

Предоставляет имя переменной через -v а затем печатает строку.


Найдите некоторые комментарии относительно вашего сценария:

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 будет содержать от 2-го значения на.

В качестве альтернативы, позвольте мне представить вам grep и cut:

$ grep "^Device:" $file | cut "-d " -f2-
Другие вопросы по тегам