sed: замена новой строки на заданной строке (или последней строке)

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

a,b,c,d,e,f 1,2,3,4,5,6 7,8,9,0,1,2 

Мне нужно присоединиться к последним двум строкам с запятой, например:

 a,b,c,d,e,f 1,2,3,4,5,6,7,8,9,0,1,2 

Проблема в том, что это все внутри цикла, который добавит две новые строки в этот файл, скажем,

 a,b,c,d,e,f 1,2,3,4,5,6,7,8,9,0,1,2 0,9,8,7,6,5 4,3,2,1,0,9 

И теперь мне нужно сделать то же самое с последней строкой для завершения файла

 a,b,c,d,e,f 1,2,3,4,5,6,7,8,9,0,1,2 0,9,8,7,6,5,4,3,2,1,0,9 

Итак, всего в нескольких словах мне нужно заменить последнюю новую строку текстового файла запятой, но только последнюю строку, когда строки добавляются.

Я пробовал несколько вещей, но они не работают. Последний был sed '$!N;s/\n/,/' dna.data , но он применим ко всем строкам с новой строкой.

Есть идеи?

2 Solutions collect form web for “sed: замена новой строки на заданной строке (или последней строке)”

Если файл не заканчивается новой строкой, вам просто нужно обратиться к последней команде-заменителю (используйте параметр -i sed для изменения файла на месте):

 $ sed '$!N;$s/\n/,/' dna.data a,b,c,d,e,f 1,2,3,4,5,6,7,8,9,0,1,2 0,9,8,7,6,5,4,3,2,1,0,9 

Если файл заканчивается новой строкой, вы можете использовать редактор ex :

 $ ex dna.data $-1s/\n/,/ 1,2,3,4,5,6,7,8,9,0,1,2 x 

или в одной строке

 echo -e '$-1s/\\n/,/\nx' | ex dna.data 

Это может сработать или для вас (GNU sed):

 sed -i '$!N;$s/\n/,/;P;D' file 
  • как удалить апостроф и удалить пространство
  • Sed: как заменить 0 и:?
  • Как удалить строку, если она длиннее XY?
  • sed - найти и заменить текст, содержащий "/"
  • Максимальное количество строк / команд редактирования в скрипте SED?
  • Sed - Как я могу вставить строку после определенной строки И какой-то символ?
  • Две команды sed в одной команде
  • Ошибка при использовании sed
  • sed пространство и пространство для удержания
  • команда sed внутри sed
  • Поиск строки и удаления до появления следующего символа
  • Linux и Unix - лучшая ОС в мире.