Вы можете попробовать установить и использовать grub-customizer
Чтобы установить grub-customizer:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
Чтобы запустить его, просто введите sudo grub-customizer
Если вы видите диспетчер загрузки Windows, попробуйте вверх по списку.
Подробнее здесь: http://linuxg.net/how-to-install-grub-customizer-4-0-6-on-ubuntu-linux-mint-elementary-os -and-их-производные-системы /
Вы можете использовать grep с опцией шаблона файла (-f)
Пример:
$ echo -e "apple\nsony\nsamsung" > file_pattern
$ grep -f file_pattern your.csv
РЕДАКТИРОВАТЬ :В ответ на ваши новые ограничения:
sed 's/^/\^/g' $itemsFile > /tmp/pattern_file
while IFS=$';' read -r -a array
do
echo ${array[1]} | grep -q -f /tmp/pattern_file.txt
if [ $? -eq 0 ]; then
# here I do something with ${array[2]}, ${array[4]} line by line and so on,
# so I can't match the whole file $file_in at once but online line by line.
fi
done < $file_in
В вашем скрипте две ошибки:
grep пытается сопоставить строку $itemToFind
, потому что вы поместили ее между одинарными кавычками '
. Вместо этого используйте двойную кавычку -.
вы используете массив из индекса 1, а help read
говорит, что он начинается с нуля.
Это должно дать это:
while IFS=$';' read -r -a array
do
mapfile -t arrayItems < $itemsFile
## now loop through the above array
for itemToFind in "${arrayItems[@]}"
do
itemFound=""
itemFound=$(echo ${array[0]} | grep -o "$itemToFind")
if [ -n "$itemFound" ]
then
echo $itemFound
# so end to search in case the item is found
break
fi
done
done < $file_in
РЕДАКТИРОВАТЬ:
Если вы хотите сделать это быстрее, вы можете использовать расширенные регулярные выражения:
grep -E 'apple|sony|samsung' $file_in
И если вы хотите отображать только бренды:
grep -E 'apple|sony|samsung' $file_in | awk '{print $1}'