Как я могу распечатать все, кроме последних 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 быть закодированы, чтобы избежать нескольких tr процессов в конвейере?
  • Как удалить пробелы из переменных оболочки?
  • Как преобразовать файлы txt UTF-8 во все прописные буквы в bash?
  • Debian wheezy update break tr команда
  • Удалить символ из строки в определенном месте
  • Может ли работать с регулярным выражением?
  • Итерировать файлы в папке
  • SED, чтобы найти и заменить точное слово, начинающееся с $
  • Как превратить буквы с прописными буквами в верхний регистр? - Используя команду 'tr'
  • Linux и Unix - лучшая ОС в мире.