Intereting Posts
gpg запускать gpg-агент по запросу? Использование git над sshfs на OSX В терминальных подсказках есть таинственное Ошибка "/run/lvm/lvmetad.socket: сбой подключения: нет такого файла или каталога" – но не связанный с Grub macchanger: Слишком много открытых файлов в системе Ethernet-адаптер застрял на скорости 10 Мбит / с как создать много tar-архивов для огромной папки Прикрепление файла в Unix для данной строки, а затем другой набор строк в этом файле и печать свойств файла тоже Доступ к компьютерам локальной сети через соединение VPN В чем разница между созданием массива mdadm с использованием разделов или всего диска напрямую Могут ли два хоста иметь одинаковый IP-адрес в / etc / hosts? Что происходит с getopts, когда встречается конец опций Создание списка уникальных отправителей из почтовых файлов Thunderbird через командную строку Как остановить мою программу как демон во время работы? Как привязать «вкладку» и «сдвиг + вкладку» на экране GNU?

Удаление строки из файла, который имеет только определенный символ

Как удалить определенную строку, которая содержит только символ конца строки в Unix.

Содержимое файла выглядит следующим образом:

H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $ $ D^I001000456108^IU$ 

Должен быть,

 H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $ D^I001000456108^IU$ 

Вы можете сделать что-то вроде:

 sed '/^\$*$/d' filename 

Образец

 $ cat filename H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $ $ D^I001000456108^IU$ $ sed '/^\$*$/d' filename H XXXXXXXXXXXXXXXXXX ""$SEQ_NO $ D^I001000456108^IU$ 

Вы можете использовать sed(1) для удаления всех строк, состоящих только из CR:

 cat your_file.txt | sed -e '/^$/d' 
 grep -vx '\s*\$\s*' file.txt 
  • -x Выберите только те совпадения, которые точно соответствуют всей строке
  • -v Инвертировать смысл соответствия, чтобы выбрать не совпадающие строки
  • \s* ноль или более символов пробела
  • \$ соответствует $ character

Если известно, что верхние и конечные белые пробелы отсутствуют в соответствующих строках:

 grep -vx '\$' file.txt 

Это просто:

 grep . < file.in > file.out 

grep . ищет строки, содержащие хотя бы один символ. Таким образом, это все строки, кроме пустых или те, которые содержат байтовые последовательности, которые не образуют ни одного действительного символа.

С:

 LC_ALL=C grep . 

Мы бы удостоверились, что каждая последовательность байтов формирует допустимые символы, поэтому она будет содержать эти недопустимые текстовые строки, если таковые имеются. Или вы можете использовать:

 grep -vx '' 

Другой вариант:

 awk length < file.in > file.out 

Опять же, вы можете найти awk реализации, где length может возвращать 0 для строк, содержащих только несимволы.

Если вы хотите удалить строки, состоящие только из одного символа $ (за которым следует символ новой строки), тогда:

 grep -vxF '$' < file.in > file.out