Как я могу заменить несколько пустых строк единственной пустой строкой в ударе?

Сценарии содержимого выполняются в специальной среде, называемой изолированным миром. Они имеют доступ к DOM страницы, в которую они внедрены, но не к каким-либо переменным или функциям JavaScript, созданным этой страницей. Каждый скрипт содержимого выглядит так, как будто на странице, на которой он запущен, нет другого JavaScript-кода. То же самое верно и в обратном: JavaScript, работающий на странице, не может вызывать какие-либо функции или обращаться к любым переменным, определенным скриптами содержимого.

Изолированные миры позволяют каждому скрипту контента вносить изменения в свою среду JavaScript, не беспокоясь о конфликте со страницей или другими скриптами контента. Например, сценарий контента может включать JQuery v1, а страница может включать JQuery v2, и они не будут конфликтовать друг с другом.

Другим важным преимуществом изолированных миров является то, что они полностью отделяют JavaScript на странице от JavaScript в расширениях. Это позволяет нам предлагать дополнительные функции сценариям содержимого, которые не должны быть доступны с веб-страниц, не беспокоясь о доступе к ним веб-страниц.

35
задан Cœur 3 September 2017 в 11:33
поделиться

9 ответов

Для систем, производных от BSD (включая GNU):

Вам просто нужно cat с параметром -s , который заставляет его удалять повторяющиеся пустые строки из вывода:

cat -s

Из справочной страницы: -s --squeeze-blank: подавлять повторяющиеся пустые выходные строки.

78
ответ дан 27 November 2019 в 06:26
поделиться

Конвейерная передача его в | uniq может быть решением (если строки, отличные от пустых, не дублируются)

-4
ответ дан 27 November 2019 в 06:26
поделиться
grep -A1 . <yourfile> | grep -v "^--$"

Это решение grep работает, если вам нужно следующее:

Вход

line1

line2
line3


line4



line5

Выход

line1

line2
line3

line4

line5
13
ответ дан 27 November 2019 в 06:26
поделиться

На самом деле, если вы замените несколько символов новой строки одной новой строкой, вы получите следующий результат:

something
something else
something else again

Вы можете добиться этого следующим образом:

sed /^$/d FILE
11
ответ дан 27 November 2019 в 06:26
поделиться

Решение с awk , которое заменяет несколько пустых строк одной пустой строкой:

awk 'BEGIN{bl=0}/^$/{bl++;if(bl==1)print;else next}/^..*$/{bl=0;print}' myfile
3
ответ дан 27 November 2019 в 06:26
поделиться

Используйте python:

s = file("filename.txt").read()
while "\n\n\n" in s: s = s.replace("\n\n\n", "\n\n")
import sys
sys.stdout.write(s)
1
ответ дан 27 November 2019 в 06:26
поделиться

Обычно, если я обнаруживаю, что sed не может сделать то, что мне нужно, я обращаюсь к awk:

awk '
BEGIN {
    blank = 0;
}

/^[[:blank:]]*$/ {
     if (!blank) {
          print;
     }
     blank = 1;
     next;
}

{
     print;
     blank = 0;
}' file
3
ответ дан 27 November 2019 в 06:26
поделиться

Очень просто сделать с vim. Просто откройте файл и введите следующее:

:%s/\n\n\n*/\r\r/

Это сократит все блоки из более чем 2 новых строк до 2 новых строк. Надеюсь, это поможет!

-1
ответ дан 27 November 2019 в 06:26
поделиться

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

Это можно сделать с помощью:

sed /^[:space:]*$/d FILE
-2
ответ дан 27 November 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: