На этот вопрос уже есть ответ здесь:
У меня есть список, содержащий имена файлов. Как мне создать новый список, содержащий только первые 4 символа каждой строки?
Вы можете использовать grep
, чтобы показывать только первые (до) 4 символов в каждой строке:
grep -Eo '^.{,4}' /PATH/TO/FILE
-E
включает расширенные регулярные выражения, которые необходимы для квантификатора фигурных скобок здесь .
-o
заставляет grep
выводить только соответствующую часть, а не всю строку, на которой она была найдена
Шаблон ^.{,4}
соответствует в начале строки (^
) последовательности, состоящей из любого символ (.
) и длиной до 4 символов ({,4}
).
Чтобы сохранить выходные данные в виде файла, просто используйте перенаправление:
grep -Eo '^.{,4}' /PATH/TO/FILE > /PATH/TO/OUTPUT-FILE
Продолжение:
Для универсального шаблона, соответствующего определенному диапазону (от x- рассмотрим этот пример, который отображает с 10-го по 18-й символ каждой строки:
$ echo 123456789abcdefghij | grep -Po '(?<=^.{9}).{8}'
abcdefgh
Это достигается путем пропуска 9 первых символов без их сопоставления с использованием так называемых взгляд назад ((?<=...)
). Эта особенность не включена в расширенные регулярные выражения, понятные grep
, поэтому нам нужно -P
вместо того, чтобы включить PCRE.
После того, как пропущено ровно 9 символов, оно соответствует следующим ровно 8 символам. Если строка короче, она не будет совпадать. Чтобы снова сопоставить до 8 символов, как в первой части этого ответа, напишите {,8}
вместо {8}
.