Как я могу распечатать все, кроме последних n символов в bash?

Я работаю со стандартным вводом (соединяя два файла вместе) и хочу, чтобы все остальные, кроме последних 10 символов результата, были переданы следующей командой.

Все, что я могу найти при поиске, – это использовать sed , awk или tr чтобы удалить последние n символов из каждой строки, или head , tail или rev чтобы удалить n строк.

Что я могу использовать для этого из стандартного вывода в команду (надеюсь, просто и с помощью одной команды)?

Пример:

 Input: SELECT 'A', 1, GETDATE() UNION ALL SELECT 'B', 2, GETDATE() UNION ALL ... SELECT 'Z', 2, GETDATE() UNION ALL Output: SELECT 'A', 1, GETDATE() UNION ALL SELECT 'B', 2, GETDATE() UNION ALL ... SELECT 'Z', 2, GETDATE() данные Input: SELECT 'A', 1, GETDATE() UNION ALL SELECT 'B', 2, GETDATE() UNION ALL ... SELECT 'Z', 2, GETDATE() UNION ALL Output: SELECT 'A', 1, GETDATE() UNION ALL SELECT 'B', 2, GETDATE() UNION ALL ... SELECT 'Z', 2, GETDATE() 

Для чего это стоит, я использую CygWin в Windows, поэтому он должен быть с довольно стандартными и старыми инструментами unix 🙁

2 Solutions collect form web for “Как я могу распечатать все, кроме последних n символов в bash?”

Вы можете использовать head :

 command | head -c-10 

удалит последние 10 байтов из вывода command .

Цитата из man head :

  -c, --bytes=[-]K print the first K bytes of each file; with the leading `-', print all but the last K bytes of each file 

Поскольку вы конкретно указываете, что 10 символов, которые должны быть удалены, будут происходить на одной строке, вы также можете использовать sed . Выполните вывод команды:

 sed '$s/\(.\{10\}\)$//' 

или если ваше sed поддерживает расширенное регулярное выражение:

 sed -r '$s/.{10}$//' 

Синтаксис будет аналогичным с использованием perl :

 perl -pe 's/.{10}$// if eof' 

Вы должны использовать perl :

 $ perl -lpe '$_=substr($_,0,-10) if eof' file SELECT 'A', 1, GETDATE() UNION ALL SELECT 'B', 2, GETDATE() UNION ALL ... SELECT 'Z', 2, GETDATE() 
  • Чтобы удалить новые строки после пустой строки
  • tr аналог для символов Unicode?
  • tr не имеет эффекта при использовании в $ () и сохраняется в переменной
  • команда tr не работает с восьмеричными последовательностями
  • Является ли историческое поведение команды Unix V5 tr дополнением set2 отличным от того, что мы считаем сегодня «классическим» поведением System V (1983-1988)?
  • Как удалить пустые строки в файле?
  • Почему этот однослойный клоббер загружается?
  • «Тюнинг» выражения tr и sed
  • Пути трубопроводов с различными типами котировок для замены косой черты
  • используя tr -t command
  • Ошибка при замене даты в файле с помощью команды tr
  • Linux и Unix - лучшая ОС в мире.