Bash удаляет все символы после шаблона с помощью awk

У меня есть входной файл в следующей форме:

something here somethingElseHere^[%-somestuff here ^[%-somestuff here 

Обратите внимание, что ^[ является escape-символом \x1b .

Итак, что я пытаюсь сделать, это удалить все в файле после первого ^[ возникновения, в сценарии bash, поэтому мне должно получиться что-то вроде этого:

 something here somethingElseHere 

Моим решением было: awk -F "\x1b" {'print $1'} но это дает это как результат:

 something here somethingElseHere (empty line here) 

Таким образом, он добавляет лишнюю пустую строку после последней. Тем не менее, если я удалю его вручную, я получаю дополнительный байт. Я сделал программу на C ++, которая читает файл до \x1b и записывает все прочитанные символы в отдельном файле, но с AWK, после удаления дополнительной строки, я все равно получаю 1 байт больше, чем это делает с C ++.

Редактировать:

возможно, это символ EOL, который добавляется при использовании AWK? Я не добавляю его при использовании программы на C ++.

ОБНОВИТЬ:

Я только что пробовал некоторые команды, и большинство из них работают, если я их открываю в vi , но у них есть дополнительный байт, и я не могу понять, откуда он.

 $hexdump -x file1 0000000 4329 706f 7279 6769 7468 6328 2029 3931 0000010 3939 4d20 6369 6f72 6f73 7466 4320 726f 0000020 6f70 6172 6974 6e6f 610a 6362 6564 6766 0000030 6968 6b6a 6d6c 6f6e 7170 7372 7574 7776 0000040 7978 534d 5020 4c43 4c58 6f46 746e 3020 0000050 3130 a8f8 4955 0a42 0000058 $hexdump -x file2 0000000 4329 706f 7279 6769 7468 6328 2029 3931 0000010 3939 4d20 6369 6f72 6f73 7466 4320 726f 0000020 6f70 6172 6974 6e6f 610a 6362 6564 6766 0000030 6968 6b6a 6d6c 6f6e 7170 7372 7574 7776 0000040 7978 534d 5020 4c43 4c58 6f46 746e 3020 0000050 3130 a8f8 4955 0042 0000057 

В file1, который я генерирую с помощью bash, он добавляет дополнительный 0x0a (новый символ строки).

One Solution collect form web for “Bash удаляет все символы после шаблона с помощью awk”

Вот решение с GNU sed :

 sed -z 's/\x1b.*//' 

И ниже это решение с awk , основанное на комментариях OP:

 awk -F '\x1b' 'NF > 1 { printf "%s", $1; exit } 1' 

У вас должно быть веское основание не хотеть окончания новой строки, но имейте в виду, что обычный текстовый файл должен быть завершен в новой строке.

  • Суммируйте определенные поля данных файла журнала Apache CLF
  • Как суммировать числа внутри многих 2D-массивов
  • Запустить скрипт при загрузке?
  • копирование файлов в другое место
  • Как я могу передать позиционный параметр, сценарий bash требует, чтобы он был недоступен?
  • Как конденсировать подкаталоги
  • Параметры команды загрузки из файла верхнего уровня
  • Добавление даты в имя файла при отправке электронной почты
  • Перенаправление stdout в терминал и файл без использования канала?
  • Как сделать несколько подстрок сразу заменить в bash?
  • Есть ли способ, использующий скрипт bash, чтобы получить местоположение изменений, сделанных в последнем git-коммите?
  • Interesting Posts

    как связать команду при запуске оболочки рыбы

    linux run jar при запуске после запуска mysql

    Сжатие папки, но не сжимать определенные типы файлов, а включать их в файл gz

    Подключить сервер OpenVPN к гостевой виртуальной машине Ubuntu

    Как использовать fslint (в частности findnl) в командной строке, чтобы реально имитировать поведение fslint-gui?

    Почему Gawk в режиме совместимости разделяет записи так же, как и при расширении GNU?

    Используйте minisat, чтобы найти все решения для SAT

    Cronjob работает в часе (не ожидалось)

    Можно ли предотвратить создание файлов, являющихся общедоступными для чтения?

    Копирование рабочей Linux вместо установки новой

    Как отключить / включить сенсорную панель для Lenovo Yoga 900 13ISK2

    Почему я не могу назвать два псевдонима «?»?

    Что мне нужно для создания резервных копий как надежных и защищенных архивов?

    systemd-timesyncd на Debian 8 (терпит неудачу?)

    Как я могу узнать, что делает мой SLAB Unreclaimable Memory Grow без границ

    Linux и Unix - лучшая ОС в мире.