
У меня есть файл со множеством строк, и я хочу обрезать каждую строку до 80 символов в длину. Как это сделать?
Я уже отфильтровал строки короче 80 символов, так что теперь у меня остался файл, содержащий строки длиной 80+ символов, и я хочу обрезать каждую строку так, чтобы все они были ровно 80. Другими словами, я хочу сохранить первые 80 символов в каждой строке и удалить остальную часть строки.
решение1
Вы можете использовать cut
команду:
cut -c -80 file
С grep
:
grep -Eo '.{80}' file
решение2
С использованиемАВК:
awk '{print substr($0,1,80)}' file.txt
С использованиемрезать:
cut -c -80 file.txt
С использованиемцвет:
colrm 81 file.txt
С использованиемсэд:
sed 's/^\(.\{80\}\).*$/\1/' file.txt
С использованиемгрэп:
grep -Eo '.{80}' file.txt
решение3
Чтобы вырезать (обрезать) каждую строку файла (и вывести результат в текущую консоль), используйте:
cut -c -80 infile # cut only counts bytes (fail with utf8)
grep -o '^.\{1,80\}' infile
sed 's/\(^.\{1,80\}\).*/\1/' infile
Если вы хотите вставить новую строку после 80-го символа и разбить каждую строку длиннее 80 символов на большее количество строк, используйте:
fold -w 80 infile # fold, like cut, counts bytes.
Если вы хотите разделить только пробелы (целые слова), используйте:
fold -sw 80 infile
Для всех приведенных выше решений перенаправьте в какой-либо другой файл, например >outfile
(не используйте то же имя, это не сработает) в конце любой команды, чтобы сохранить результат в outfile
. Пример:
fold -sw 80 infile > outfile
решение4
Использование Raku (ранее Perl6)
~$ raku -ne 'put ~$0 if m/ ^^(. ** 80) /;'
ВЫХОД:
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
the of and to in a is that for it as was with be by on not he i this are or his
[TRUNCATED]
Код выше возвращает первые 80 символов строки ( ^^
утверждение нулевой ширины означает «начало строки»). Если строка слишком короткая, ничего не возвращается. Чтобы вернутьВПЛОТЬ ДО80 символов, используйте форму ** 1..80
.
Нумерация захватов начинается с $0
. Получите считывание количества возвращенных символов, добавив .chars
к ~$0
переменной захвата:
~$ raku -ne 'put ~$0.chars if m/ ^^(. ** 80) /;' ~/top50.txt
80
80
80
80
[TRUNCATED]
НТН.