2014-09-18 2 views
1

Я пытаюсь заменить пробелы запятой на выход из ls -l. (Для того, чтобы сделать длинную историю короткой, я хочу, чтобы отделить столбцы с запятой)Заменить пространство запятой в сценариях оболочки

Я попытался это

ls -l *.nc | sed -e 's/ /,/g' 

, но я получаю запятую в каждом пустом пространстве между колонной и другой. Вместо этого я хочу получить запятую, где есть «по крайней мере» пустое место. Итак, если между столбцом и следующей будет 10 пробелов, я хочу, чтобы вставлял только 1 запятую.

Любые предложения?

+0

Я разобрался с «tr» -> tr -s '[: blank:]' ',' –

+1

Ваш запрос немного запутан. В названии вы говорите «заменить», в вопросе вы говорите «вставляете только 1 запятую». Укажите пример нужного результата. – Jens

ответ

1

Вы должны сжать пробелы: конвертировать несколько пространств в один. Это может быть сделано с tr -s ' ':

ls -l *.nc | tr -s ' ' | sed -e 's/ /,/g' 

От man tr:

-s, --squeeze-повторы

заменить каждый входной последовательности повторяющегося символа, который указан в SET1 с единственным вхождением этого символа

Вы можете также сказать sed, чтобы сделать всю работу:

ls -l *.nc | sed 's/[ \t]+*/,/g' 
        ^^^^^^^^
         |  replace with comma 
        get one or multiple spaces and tabs 
0

Для удовольствия, только с tr (нужно дважды)

ls -l *.nc | tr ' ' ',' | tr -s ',' 

где:

  • 1-й тр заменяет все пробелы с запятой
  • 2-й tr сжать запятые запятые на 1 запятую
Смежные вопросы