Linux sed удалить пустые строки

Delete empty lines using sed

You may have spaces or tabs in your «empty» line. Use POSIX classes with sed to remove all lines containing only whitespace:

A shorter version that uses ERE, for example with gnu sed:

(Note that sed does NOT support PCRE.)

@BernieReiter ^\s*$ will match all «empty» lines, empty here means, the line contains no chars, or the line contains only empty strings (E.g. spaces). All matched lines will be removed by sed, with the d command.

I am missing the awk solution:

How does this work? Since NF stands for «number of fields», those lines being empty have 0 fields, so that awk evaluates 0 to False and no line is printed; however, if there is at least one field, the evaluation is True and makes awk perform its default action: print the current line.

sed

grep

awk

These show up correctly in your online tool, but [] should not be escaped in a bracket expression, so the code here isn’t correct for \[\[:space:\]\] or \[ \t\] — should be [[:space:]] and [ \t] .

@BenjaminW. Thanks for catching that. Those were not from the original author, but came from Edit 3 when it was changed from regular text to «code», which then «exposed» the `\` escaping. I have fixed them now.

sed ‘/^$/d’ should be fine, are you expecting to modify the file in place? If so you should use the -i flag.

Maybe those lines are not empty, so if that’s the case, look at this question Remove empty lines from txtfiles, remove spaces from start and end of line I believe that’s what you’re trying to achieve.

I believe this is the easiest and fastest one:

If you need to ignore all white-space lines as well then try this:

s="\ \ a\ b\ \ Below is TAB:\ \ Below is space:\ \ c\ \ "; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -l 

Yes, I know, but the initial question did not mention whether the source is a file or something else, so the solution is what comes after «|», and before it just an example of a source. Simply to distinguish the solution from the source of lines.

grep ‘\S’ is definitely not portable. If you have grep -P then you can use grep -P ‘\S’ but it’s not supported on all platforms, either.

Читайте также:  Реализация двухфакторной аутентификации linux

The downside of grep . compared to the other solutions is that it will highlight all the text in red. The other solutions can preserve the original colors. Compare unbuffer apt search foo | grep . to unbuffer apt search foo | grep -v ^$

@wisbucky grep does not default to color output, but often it’s enable via a shell alias or environment variable. Use grep —color=never . to override.

Another option without sed , awk , perl , etc

strings — print the strings of printable characters in files.

«For each file given, GNU strings prints the printable character sequences that are at least 4 characters long. » so very short lines might give you a surprise if you’re unaware of this. There is a —bytes=min-len option to allow shorter lines.

With help from the accepted answer here and the accepted answer above, I have used:

$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt `s/^ *//` => left trim `s/ *$//` => right trim `/^$/d` => remove empty line `/^\s*$/d` => delete lines which may contain white space 

This covers all the bases and works perfectly for my needs. Kudos to the original posters @Kent and @kev

The command you are trying is correct, just use -E flag with it.

-E flag makes sed catch extended regular expressions. More info here

sed -n '/ / p' filename #there is a space between '//' 

You are most likely seeing the unexpected behavior because your text file was created on Windows, so the end of line sequence is \r\n . You can use dos2unix to convert it to a UNIX style text file before running sed or use

to remove blank lines whether or not the carriage return is there.

Hi, what is the -r flag doing and is it possible to combine it with -i to modify the file directly and avoid printing to screen. In addition, I think that this command would also work as sed -r «/^\r$/d»

This works in awk as well.

awk '!/^$/' file xxxxxx yyyyyy zzzzzz 

You can do something like that using «grep», too:

My bash -specific answer is to recommend using perl substitution operator with the global pattern g flag for this, as follows:

$ perl -pe s'/^\n|^[\ ]*\n//g' $file xxxxxx yyyyyy zzzzzz 

This answer illustrates accounting for whether or not the empty lines have spaces in them ( [\ ]* ), as well as using | to separate multiple search terms/fields. Tested on macOS High Sierra and CentOS 6/7.

FYI, the OP’s original code sed ‘/^$/d’ $file works just fine in bash Terminal on macOS High Sierra and CentOS 6/7 Linux at a high-performance supercomputing cluster.

Источник

sed -d

Изображение баннера

Удалить строку в которой нет определённого паттерна

Для таких операций можно использовать !d — это противоположная d операция — удалятся строки где паттерна нет, то есть останутся те, где паттерн присутствует.

Читайте также:  Посмотреть сколько памяти занято linux

Например в файле visited.log Есть строки вида

Если стоит задача выписать в отдельный файл только посещения heihei.ru

sed ‘ / heihei / !d ‘ visited.log > hh.log
cat hh.log

Удалить первые несколько строк

Допустим Вы хотите удалить три первые строки файла example.txt

Удалить пустые строки

Если строка действительно пустая, то подойдёт команда

Обычно жизнь более жестока, и в строках содержатся пробелы.

Удалить такие строки тоже можно

$ sed ‘ / ^[[:space:]]*$ / d ‘ input.txt > output.txt

Удалить комментарии

Допустим, у вас есть код или просто текст в котором много комментариев.

Строка с комментариями начинается с символа #

Рассмотрим файл websites

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

Опция -i позволяет изменять текущий файл

Если хотите сохранить исходный файл а текст без комментариев записать в новы (если вы уже удалили комментарии — убедитесь, что вы их вернули обратно)

sed ‘/^#/ d ‘ websites > nocomments
cat nocomments

Опция -i не нужна так как исходный файл мы не изменяли

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

Удалить комментарии и пустые строки

sed -i.bak ‘/^\s*#/ d ;/^$/ d ‘ nginx.conf
vi nginx.conf

Удалить строку со словом

Удалить все строки где встречается слово Apple в файле input.txt

Here is an Apple Here Pen Here ApplePen Integer is Here Here is a Float Here Pen Here Pineapple Here PineapplePen Umm Apple Apple Apple Pen

Сделать это можно с помощью опции d

sed ‘/Apple/d‘ input.txt > output.txt

Integer is Here Here is a Float Here Pen Here Pineapple Here PineapplePen

ApplePen

Усложним условие — удалим все строки где есть слово Pineapple и слово Integer

sed ‘/Pineapple\|Integer/ d ‘ input.txt > output.txt

| выступает в роли логического ИЛИ

\ нужна чтобы экранировать |

Here is an Apple. Here is a Pen. Here is an ApplePen Here is a Float Umm Apple Apple Apple Pen

Удаление без d

Удалять из файлов можно и без применения d

Источник

Удалить пустые строки с файла в Unix/Linux

Иногда, у нас имеются файлы и в них много пустых строк — это не очень удобно (по крайней мере для чтения). Файлы можно отредактировать вручную, если файл имеет несколько пустых строк, но если файл имеет тысячи пустых строк, это трудно сделать вручную. Используйте один из следующих методов для удаления пустых строк из файла.

-=== СПОСОБ 1 — Использование утилиты SED ===-

Sed потоковый редактор. С помощью этой утилиты, можно легко удалить все пустые строки. Используйте одну из следующих команд sed для удаления пустых строк из файла.

  • main.txt — Это исходный файл, из которого нужно удалить пустые строки.
  • output_file.txt — Будет служить файлом без пустых строк.

-=== СПОСОБ 2 — Использование perl ===-

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

# perl -i -n -e "print if /S/" main.txt

-=== СПОСОБ 3 — Использование утилиты AWK ===-

Используйте команду awk для удаления пустых строк из файла.

  • main.txt — Это исходный файл, из которого нужно удалить пустые строки.
  • output_file.txt — Будет служить файлом без пустых строк.
# awk 'NF > 0' main.txt > out.txt

-=== СПОСОБ 4 — Использование утилиты CAT ===-

Используйте команду cat для удаления пустых строк из файла.

  • main.txt — Это исходный файл, из которого нужно удалить пустые строки.
  • output_file.txt — Будет служить файлом без пустых строк.
$ cat main.txt | grep -Ev "^$" > out.txt

-=== СПОСОБ 5 — Использование утилиты TR ===-

Используйте команду cat для удаления пустых строк из файла.

  • main.txt — Это исходный файл, из которого нужно удалить пустые строки.
  • output_file.txt — Будет служить файлом без пустых строк.
Читайте также:  Server configurations in linux

Если появятся еще идеи. Я дополню данную тему!

Вот и все, статья «Удалить пустые строки с файла в Unix/Linux» завершена.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики

  • Arch Linux (167)
  • Commands (36)
  • Debian’s (635)
    • Administration tools Ubuntu (37)
    • Backups Debian’s (7)
    • Database в Ubuntu (58)
    • Games (игры) (1)
    • Monitoring в Debian и Ubuntu (49)
    • Virtualization в Ubuntu / Debian/ Linux Mint (41)
      • Docker (22)
      • Kubernetes (6)
      • KVM (4)
      • OpenVZ (3)
      • Vagrant (5)
      • VirtualBox (6)
      • ArgoCD (1)
      • Concourse (1)
      • Gitlab (1)
      • Jenkinks (4)
      • Spinnaker (1)
      • Apache (32)
      • Cherokee (1)
      • FTP-services (5)
      • Lighttpd (1)
      • Nginx (26)
      • PHP (27)
      • Proxy для Debian’s (2)
      • Tomcat (4)
      • Панели управления в Ubuntu/Debian/Mint (24)
      • Установка и настройка почты на Ubuntu/Debian (12)
      • Хранилища (clouds) (2)
      • Administration tools freeBSD (19)
      • Database во FreeBSD (52)
      • Monitoring во freeBSD (37)
      • Virtualization во FreeBSD (22)
      • VoIP (1)
      • Установка Web сервисов (91)
      • Установка и настройка почты (6)
      • Установка из ports (пакетов) (19)
      • Установка из sorce code (исходников) (23)
      • Непрерывная интеграция (CI) (27)
      • Database в MacOS (36)
      • Monitoring в Mac OS (31)
      • Security (безопасность) (12)
      • Virtualization в Mac OS (30)
        • Docker (19)
        • Kubernetes (6)
        • Vagrant (5)
        • VirtualBox (5)
        • ArgoCD (1)
        • CircleCI (1)
        • Concourse (1)
        • Gitlab (1)
        • Jenkinks (4)
        • Spinnaker (1)
        • Administration tools CentOS (49)
        • Backups RPM’s (4)
        • Database в CentOS (68)
        • Monitoring в CentOS (67)
        • Virtualization в CentOS/ Red Hat/ Fedora (42)
          • Docker (23)
          • Kubernetes (6)
          • KVM (5)
          • OpenVZ (2)
          • Vagrant (5)
          • VirtualBox (6)
          • VMWare (3)
          • ArgoCD (1)
          • Concourse (1)
          • Gitlab (1)
          • Jenkinks (4)
          • Spinnaker (1)
          • Apache (35)
          • Cherokee (1)
          • DNS (3)
          • FTP (10)
          • Nginx (33)
          • PHP (34)
          • Proxy для RedHat’s (2)
          • Tomcat (2)
          • Voice (2)
          • Панели управления в CentOS/Red Hat/Fedora (27)
          • Прокси сервер на CentOS/RHEL/Fedora (4)
          • Установка и настройка почты на CentOS/RHEL/Fedora (14)
          • Хранилища (clouds) (1)

          соц сети

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Архив новостей

          Свежие записи

          Свежие комментарии

          • Глеб к записи Установка Adobe Flash Player в Debian/Ubuntu/Mint
          • Максим к записи Заблокировать User Agents используя Nginx
          • Денис к записи Как включить EPEL репозиторий на CentOS
          • Гость к записи Закомментировать/Раскомментировать строки vi/vim в Unix/Linux
          • Sergey к записи Установка и настройка OpenVPN сервера на Debian/Ubuntu/Linux Mint

          Источник

Оцените статью
Adblock
detector