Читать строку, содержащую 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-