sudo systemctl изолировать multi-user.target
sudo apt-get purge xserver-xorg-video-nouveau && sudo apt-get install nvidia-current
sudo systemctl изолировать graphical.target
После изоляции graphical.target дайте мне знать, что вы видите. Я не могу сказать вам почему, но похоже, что драйвер nouveau не был полностью удален. В качестве дополнительного шага вы можете занести модули в черный список .
Согласно комментариям, теперь вам необходимо обновить BIOS видео. Примечание: HOWTO: Flash BIOS, The Ubuntu Way может помочь, но вы будете использовать обновления видео BIOS вместо простых обновлений BIOS.
Используйте tr
с опцией -s
для сжатия последовательных пробелов в одиночные пробелы, а затем grep
результат этого:
$ echo 'Some spacious string' | tr -s ' ' | grep 'Some spacious string'
Some spacious string
Это, однако, не удалит фланговые пространства полностью, а только сожмет их в одно пространство с обоих концов.
Использование sed
для удаления боковых заготовок, а также сжатия внутренних заготовок до одиночных промежутков:
echo ' Some spacious string' |
sed 's/^[[:blank:]]*//; s/[[:blank:]]*$//; s/[[:blank:]]\{1,\}/ /g'
Затем это можно было передать grep
.
Если вы просто хотите игнорировать все пробелы между ними, вы можете использовать echo your text |tr -d [[:space:]]| grep "yourtext"
, но в выводе не будет места.
Пример:
echo "Hi This Is Test" |tr -d [[:space:]] |grep HiThisIsTest
Вывод:
HiThisIsTest
Чтобы ответить на главный вопрос How to match words and ignore multiple spaces?
Что-то вроде следующего поможет вам получить то, что вам нужно:
echo "Ambari Server running" | tr '[:upper:]' '[:lower:]' | grep -E '\s*ambari\s+server\s+running\s*'
Он берет ввод и переводит его в нижний регистр, а затем ищет совпадения в нижнем регистре. Мы используем \s*
для 0 или более пробелов (, поэтому будем включать вкладки и т. д. )и \s+
для 1 или более пробелов.
Если ваш ввод был в файле, подобном foo2.txt
ниже:
Ambari Server running
Ambari Server running
Ambari Server running
Тогда вы могли бы сделать что-то вроде:
cat foo2.txt | tr '[:upper:]' '[:lower:]' | grep -E '\s*ambari\s+server\s+running\s*'
ambari server running
ambari server running
ambari server running
Если вас интересует только количество, вы можете немного изменить его, чтобы оно было похоже на:
cat foo2.txt | tr '[:upper:]' '[:lower:]' | grep -E '\s*ambari\s+server\s+running\s*' | wc -l
Используйте оператор Regex +
, чтобы указать один или несколько предшествующих токенов, в данном случае пробел. Таким образом, шаблон будет\+
:
echo "Ambari Server running" | grep -i "Ambari \+Server \+running"
Я бы посоветовал использовать класс символов [:blank:]
для соответствия любому горизонтальному пробелу, а не только простому пробелу, если вы не уверены:
echo "Ambari Server running" | grep -i "Ambari[[:blank:]]\+Server[[:blank:]]\+running"
С другой стороны, если вы хотите оставить только один пробел между словами, используйтеawk
:
echo "Ambari Server running" | \
awk '$1=="Ambari" && $2=="Server" && $3=="running" {$1=$1; print}'
$1=="Ambari" && $2=="Server" && $3=="running"
соответствует трем нужным полям
{$1=$1}
перестраивает запись с пробелом в качестве нового разделителя
{print}
распечатывает запись