Вы уверенный, что это не высказывание Mac, "Посмотрите, у нас есть рабочий стол как GNOME!".
openSUSE хорош и прибывает в несколько ароматов как KDE (окна как с несколькими дополнениями), гном (как Mac...), и lxde/xfce (легкие дистрибутивы).
Это использует основанную на об/мин систему управления пакета с застежкой-молнией (libzypp).
YaST является также потрясающим в openSUSE. Это делает управление системой очень удобным для пользователя.
Если Вам не нравится то, что Вы видите, создаете свое собственное с suseStudio!
Не уверенный, если они похожи 'на предыдущую человечность' версии. Но мир с открытым исходным кодом всегда совершенствуется/изменяет, и не повреждает адаптировать и изучать новые вещи.
Я думаю причина, Вы ожидаете что-то другое, чем, что происходит, то, что Вы берете
[0-9]{n}
означать соответствие только точно n случаи символов в [0-9] и выбрасывать остальных, когда, что его выполнение находит n случаями символов в [0-9] и называет это соответствием. Таким образом в
[0-9]{1}
это находит любого точно одним возникновением чего-то соответствующего [0-9] так 1 соответствие, затем при исследовании этих 22, это останавливается в первых 2 и считает это соответствием, не смотря на остальных. Так же для 333. Если Вы указали
[0-9]{2}
это не соответствовало бы 1, но 22 соответствия и затем 33 в 333 соответствиях, таким образом, это захватывает его.
Как slm сказал, границы слова являются билетом здесь. У Вас есть и-P и-E разновидности grep regex соответствие в Вашем вопросе. Можно использовать GNU \<и \> с-E как это:
ls | xargs -n 1 basename | grep -E '\<[0-9]{1}\>'
или \b с или-E или соответствие pcre-P как это
ls | xargs -n 1 basename | grep -P '\b[0-9]{1}\b'
Использовать grep -x
найти точные совпадения вместо того, чтобы найти соответствия в строках.
grep foo
находит строки, которые содержат foo
, в то время как grep -x foo
находит строку, которые являются foo
.
То же самое, grep -E '[0-9]{1}'
(то же как grep '[0-9]'
) находит строки, которые содержат одну цифру. grep -xE '[0-9]{1}'
находит строки, которые состоят из одной цифры.
С GNU grep
, можно использовать --color
или -o
опции видеть, что подбирается, хотя это покажет Вам все соответствия.
Это вызвано тем, что первые два символа 333
соответствуйте regex, таким образом, целая строка соответствует.
Если Вы хотите избежать, чтобы Вы могли использовать:
(^|[^0-9])[0-9]{2}([^0-9]|$)
При помещении содержания примеров в текстовом файле, Вы видите почему grep
соответствует ему:
$ grep -E '[0-9]{1}' file.txt
touch 1
touch 22
touch 333
Можно использовать границы слова (-w
) сказать grep
то, что Вы хотите только распознать отдельное слово своего regex (\<REGEX\>
) вместо любой строки, которая, оказывается, соответствует ему:
$ grep -Ew '\<[0-9]{1}\>' file.txt
touch 1
$ grep -Ew '\<[0-9]{2}\>' file.txt
touch 22
$ grep -Ew '\<[0-9]{3}\>' file.txt
touch 333
\<
и \>
сказать grep
где границы. Это вызывает grep
для распознавания явных слов такой как 1, но не строки такой как 11, 111, или aa11aa, начиная с, regex в этих строках не содержится границами слова.