Замена нового символа линии на канал и новый символ строки

Я использую ksh .

У меня есть файл temp.txt с некоторыми данными, temp.txt с данными.

 one|two|three|four|five abc|def|pqr|lmn|xyz 

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

Тем не менее, я хочу, чтобы запись заканчивалась разделителем каналов и новым символом строки, как показано ниже:

 one|two|three|four|five| abc|def|pqr|lmn|xyz| 

Я пробовал следующие команды, но все еще безуспешно:

 tr '\n' '|\n' < temp.txt 

а также

 sed -i 's/\n/|\n/g' temp.txt 

Я что-то упускаю?

Если вы не присоединились к строкам, \n не отображается в пространстве шаблонов sed : привязка конца строки – $ .

Итак, с GNU sed:

 sed -i 's/$/|/' temp.txt 

Вы можете использовать paste :

 $ :|paste -d'|' file - > new_file one|two|three|four|five| abc|def|pqr|lmn|xyz| 

или perl :

 perl -i.bak -ple '$_.="|"' file 

С помощью GNU sed вы можете заменить конец строки на | используя:

 sed -i 's/$/|/' temp.txt 

Это будет соответствовать концу строки и «заменить» ее | , но, конечно, линия все равно закончится и сохранит ее \n

Вы можете использовать GNU sed :

 sed -i 's/.*/&|/' file 

Специальный символ & соответствует образцу, сопоставляемому в RHS.