как удалить пустые пробелы из вывода tr

#bash

Вопрос:

это вывод из tr ',' 'n' . когда я преобразую это в массив для использования в цикле for, все нули удаляются, и мне нужно, чтобы они были там. Я хочу заменить все нули некоторым значением, то есть NULL, и получить из этого списка :

 `
someApp
NA
All
`
All
value3
`
someVal
9999
`
 

к этому :

 NULL
someApp
NA
All
NULL
All
value3
NULL
someVal
9999
NULL
 

«не выходит». Я добавил его просто для того, чтобы отметить пустые значения.

Комментарии:

1. Пожалуйста, исправьте свою терминологию. Символ новой строки не является пустой строкой, нулем или пробелом. Похоже, вы имеете в виду пустые строки . Если в этих строках могут быть пробелы, а могут и не быть, вам нужно четко это сказать. n является символом маркера конца строки в каждой строке, нуль-это байт всех нулей, пробел-это выделенный символ, который перемещает печатающую головку, но не генерирует никаких других выходных данных. c.f. на этой диаграмме вы просто пытаетесь отметить пустые строки? Включает ли это строки только с пробелами?

Ответ №1:

Вы можете бросить tr и использовать perl :

 perl -lne 'print join "n", map {$_ ||= "NULL"} split(/,/, $_, -1)' file
 

Ответ №2:

Не могли бы вы, пожалуйста, попробовать следующее:

 str=",someApp,NA,All,,All,value3,,someVal,9999,"
echo "$str" | tr ',' 'n' | sed 's/^$/NULL/'
 

Выход:

 NULL
someApp
NA
All
NULL
All
value3
NULL
someVal
9999
NULL
 

Шаблон ^$ для команды sed s соответствует пустой строке и
заменяется строкой NULL .

Ответ №3:

Если вы просто пытаетесь пометить пустые строки, используйте

 sed 's/^$/NULL/' file
 

Если в этих строках могут быть пробелы, и вы все еще хотите, чтобы они были отмечены,

 sed 's/^ *$/NULL/' file
 

Ответ №4:

Если ed доступно/приемлемо. Нет необходимости в tr

 printf '%sn' 



,s/,/\n/g' ',s/^$/NULL/' ,p Q | ed -s file