Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Oleg Deribas                         2:461/13       07 Feb 2002  17:51:28
 To : Zahar Kiselev
 Subject : sed?
 -------------------------------------------------------------------------------- 
 
 07 Фев 02 21:20, you wrote to all:
 
  ZK> Снова использовал sed и в который уже раз наткнулся на одну
  ZK> мелочь, которая не раз уже мешала. Вот например строчка:
 
  ZK> TIT=`echo -n $T | sed 's,  ,,g' | sed 's, $,,g'| sed 's,^ ,,g'| sed
  ZK> 's, ,_,g'`
 
  ZK> Это писалось для того, чтобы:
 
 Мне кажется, у тебя это как-то не так написано. Я, правда, не большой знаток
 sed, но если что - меня поправят.
 
  ZK> - убрать длинные цепочки повторяющихся пробелов.
 
 s/ \{2,\}/ /g
 
  ZK> - убрать пробелы в конце строки
 
 s/\ *$//
 
 g тут ни к чему.
 
  ZK> - убрать пробелы в начале строки
 
 s/^\ *//
 
 тут тоже.
 
  ZK> - заменить оставшиеся пробелы на подчеркивания.
 
 А почему так? Можно сразу заменить цепочки повторяющихся пробелов на
 подчеркивания:
 's/ \{1,\}/_/g'
 
  ZK> Все это _работает_, пусть может быть и не самым оптимальным способом,
 самом деле многое sed может делать за один проход. Hапример убирать начальные
 и конечные пробелы. В итоге получается такая строка:
 
 sed 's/^ *//;s/ *$//' | sed 's/ \{1,\}/_/g'
 
  ZK> но формирует строчку, которую можно уже использовать как имя файла. С
  ZK> одним большим "но" - если в исходной строчке встречаются символы ` или
  ZK> ', то их автоматически заменить на подчеркивания не получается. Вполне
  ZK> очевидно, что и bash и sed воспринимают их как спецсимволы.
 
 Используй двойные кавычки, если тебе внутри нужен символ '
 Если заменять подчеркиваниями не только пробелы, но и все кавычки, получается
 так:
 sed 's/^ *//;s/ *$//' | sed "s/[ \`']\{1,\}/_/g"
 
  ZK> И если bash еще можно отучить от этого при помощи добавления символа
  ZK> \, то вот что сказать sed`у - я так и не понял.
 
 А у sed'а с этим проблем нет, что bash ему дает, то он и кушает ;)
 
 Oleg
 
 --- GoldED+/W32 1.1.4.7
  * Origin: CompASS BBS (2:461/13)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 sed?   Zahar Kiselev   07 Feb 2002 22:20:02 
 Re: sed?   Alexander Kulak   07 Feb 2002 11:37:49 
 sed?   Oleg Deribas   07 Feb 2002 17:51:28 
Архивное /ru.linux/14063c62a593.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional