awk игнорирует начальные пробелы при присвоении полей. Команда по умолчанию является печатью.
awk '$1 ~ /^Linux1/'
То, что Вы хотите.
Подробное объяснение:
Замеченный вместе: Awk будет соответствовать регулярному выражению "Linux" в начале первого столбца.
grep
представление о персонаже является локально-зависимым . Если вы находитесь в не-юникодовой локали и grep из файла с символами Юникода в нем, то количество символов не будет совпадать. Если вы эхо $LANG
, то вы увидите локаль, в которой находитесь.
Если вы установите переменные окружения LC_CTYPE
и/или LANG
на значение, заканчивающееся на ".UTF-8", то вы получите правильное поведение:
$ cat data
étuis
letter
éééééé
$ LANG=C grep -E '^.{6}$' data
étuis
letter
$ LANG=en_US.UTF_8 grep -E '^.{6}$' data
letter
éééééé
$
Вы можете изменить вашу локаль только для одной команды, назначив переменную в той же строке, что и команда.
При такой конфигурации многобайтовые символы считаются одиночными. Если вы хотите полностью исключить не-ASCII символы, в некоторых других ответах есть решения для вас.
Обратите внимание, что при наличии комбинированных символов все еще возможно разорвать или, по крайней мере, сделать не совсем то, что вы ожидаете. Ваш grep grep
может относиться к ЛАТИННОМУ УМЛУЧШЕННОМУ ПОСЛЕДНИЮ E + СОММИНИРОВАННОМУ ХАРАКТЕРУ ДОСТУПИТЕЛЮ иначе, чем к ЛАТИННОМУ УМЛУЧЕННОМУ ПОСЛЕДНИЮ E С ПОСЛЕДНИКОМ.
Попробуйте это:
LC_ALL=C.UTF-8 grep -x '[_[:alnum:]]\{6\}' file
-x
использовать для соответствия целой линии, и определяется POSIX (см. grep).
Смотрите здесь для хорошего объяснения того, что делает LC_ALL
. Вы можете настроить LANG
или LC_CTYPE
на использование utf-8 для получения такого же поведения. Аффект принятия заказа составляет LC_ALL
=> LANG
=> LC_CTYPE
.
С помощью GNU grep
при сборке с поддержкой PCRE можно делать:
grep -Px '\X{6}'
While .
соответствует символу, \X
соответствует идеограмме/грамме.
В локали UTF-8:
$ locale charmap
UTF-8
$ printf '\u00e9tuis\n\u00e9tudes\n' | grep -Px '\X{6}'
études
$ printf 'e\u0301tuis\ne\u0301tudes\n' | grep -Px '\X{6}'
études
В последнем études
имеется 7 символов, 8 байт и 6 графем.
Можно попробовать что-то вроде:
grep "^[A-Za-z]\{6\}$" myfile.txt
или если слова тоже могут содержать цифры, то:
grep "^[A-Za-z0-9]\{6\}$" myfile.txt
Просто добавьте в квадратные скобки любые символы, которые вам нужны в дополнение к этим.