Intereting Posts
Swift для Android: `ld` не может найти` -lgcc` в swift для этапа компоновки компиляции android Настройка шифрования после установки debian wheezy 7z получение события не найдена ошибка в командной строке Могу ли я установить .vmlinuz- <версию> .hmac для установленного ядра после факта? как изменить разрешение файла / proc / self / pagemap.? Статическая сеть между CentOS и Windows Server 2008 Использовать netconsole для отладки с сбоем ядра Как сделать этот conky (Conky Vision) другим языком, чем английский? Запуск скрипта после открытия крышки Есть ли надежный общесистемный эквалайзер с регулируемыми полосами частот для * buntu? Как я могу создать раздел exfat, который можно установить без root? Почему «echo $ 0» дает разные результаты для двух разных терминалов? Приведение интерфейса не добавляет шлюз по умолчанию в таблицу маршрутизации в Ubuntu iptables игнорирует другие правила после добавления последнего правила WM-независимый способ сфокусировать / увеличить окно URGENT

Почему эта команда работает только для каждой другой строки?

Когда я запускаю \ls | xargs -I {} echo {} | sed 'N;s/\n/xxxxxxxxx/' \ls | xargs -I {} echo {} | sed 'N;s/\n/xxxxxxxxx/' \ls | xargs -I {} echo {} | sed 'N;s/\n/xxxxxxxxx/' , я получаю это:

 - Books aliasxxxxxxxxxA New Kind of Science Computability-and-Logic.pdfxxxxxxxxxComputability-and-Logic_k2opt.pdf Hein JL - Prolog Experiments in Discrete Mathematics, Logic, and Computability (2005).pdfxxxxxxxxxHein JL - Prolog Experiments in Discrete Mathematics, Logic, and Computability (2005)_k2opt.pdf How Automated Recommendations Affect the Playlist Creation Behavior of Users.pdfxxxxxxxxxHow Automated Recommendations Affect the Playlist Creation Behavior of Users_k2opt.pdf Lumanote- A Real-Time Interactive Music Composition Assistant.pdfxxxxxxxxxgeMsearch- Personalized Explorative Music Search.pdf research_report_dc_02.pdfxxxxxxxxxresearch_report_dc_02_k2opt.pdf thebookofshaders.pdfxxxxxxxxxthebookofshaders_k2opt.pdf 

Я не понимаю, почему результат не такой:

 - Books aliasxxxxxxxxxA New Kind of SciencexxxxxxxxxComputability-and-Logic.pdfxxxxxxxxxComputability-and-Logic_k2opt.pdfxxxxxxxxxHein JL - Prolog Experiments in Discrete Mathematics, Logic, and Computability (2005).pdfxxxxxxxxxHein JL - Prolog Experiments in Discrete Mathematics, Logic, and Computability (2005)_k2opt.pdfxxxxxxxxxHow Automated Recommendations Affect the Playlist Creation Behavior of Users.pdfxxxxxxxxxHow Automated Recommendations Affect the Playlist Creation Behavior of Users_k2opt.pdf 

 $ seq 10 | sed 'N;s/\n/+/' 1+2 3+4 5+6 7+8 9+10 

N добавляет следующую строку в пространство шаблона, затем s соединяет эти 2 строки с + , а затем sed печатает эту строку и повторяет сценарий для следующей строки ввода (где строки 3 и 4 объединяются с + … и т. Д. ).

Вам нужно

 $ seq 10 | sed 'N;N;N;N;N;N;N;N;N;s/\n/+/g' 1+2+3+4+5+6+7+8+9+10 

или используйте цикл loop в вашем скрипте sed, чтобы объединить все строки:

 $ seq 10 | sed -e :1 -e '$!N;s/\n/+/;t1' 1+2+3+4+5+6+7+8+9+10 

Обратите внимание, что он вводит весь ввод в пространство шаблонов, что не подходит для больших файлов.

Чтобы объединить строки с одним символом-разделителем, вы можете использовать paste :

 $ seq 10 | paste -sd + - 1+2+3+4+5+6+7+8+9+10 

Для многосимвольного разделителя без загрузки всего ввода в память:

 $ seq 10 | awk -v sep=-+- -vORS= 'NR>1 {print sep}; 1; END {if (NR) print RS}' 1-+-2-+-3-+-4-+-5-+-6-+-7-+-8-+-9-+-10 

Ваш сценарий sed с аннотациями:

 # Append the next line of input to the pattern space with an embedded newline N # Replace the embedded newline with the string xxxxxxxxx s/\n/xxxxxxxxx/ # (implicit print, start next cycle, overwriting the pattern space with the next line) 

Итак, вы читаете строку, добавляете строку, подставляете + вывод. Затем вы читаете третью строку, добавляете четвертую и подставляете + выходные данные.

Если вы хотите собрать все строки, вы можете сделать это двумя способами с помощью sed .

  1. Используйте явный цикл :top; N; $!btop; s/\n/xxxxxxxxx/g :top; N; $!btop; s/\n/xxxxxxxxx/g :top; N; $!btop; s/\n/xxxxxxxxx/g , то есть «добавьте следующую строку, и если мы еще не в конце, сделайте это снова, затем замените все новые строки».

  2. Используйте пробел: 1{h;d;}; H; ${x;s/\n/xxxxxxxxx/g;p;}; d 1{h;d;}; H; ${x;s/\n/xxxxxxxxx/g;p;}; d 1{h;d;}; H; ${x;s/\n/xxxxxxxxx/g;p;}; d , то есть «скопировать первую строку в область удержания и удалить из ввода, добавить туда все остальные строки и удалить их из ввода, но при достижении последней строки поменять местами область удержания, заменить символы новой строки и распечатать результат “.

Основное различие между этими двумя альтернативами состоит в том, что первый никогда не выходит из первого цикла до самого конца и накапливает строку в пространстве образца, а второй выполняется до конца для каждой строки ввода и накапливает результат в пространстве удержания ,


Еще один способ посмотреть на это, используя awk .

Ваш код sed по сути

 awk '{ line = $0; getline; print line "xxxxxxxxx" $0 }' 

Что вы хотите

 awk '{ line = (line == "" ? $0 : line "xxxxxxxxx" $0 ) } END { print line }' 

Это имитирует использование пространства удержания в sed .

Или же,

 awk '{ line = $0; while (getline > 0) line = line "xxxxxxxxx" $0; print line }' 

Это имитирует использование явного цикла в sed .

Это происходит потому, что sed – это строка за строкой. Вы должны сделать цикл следующим образом: sed -e ':again' -e 'N;s/\n/xxxxx/' -e 'tagain' , или проще – использовать tr "\n" "xxxxx"