Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Работает sed -i \"s/.\\{5\\}\\(.\\)/\\u\\1/\" file.txt, но не уверен в правильности …  (Прочитано 704 раз)

0 Пользователей и 1 Гость просматривают эту тему.

adawdp

  • Автор темы
  • Гость
2015 Jul 22; 04:44 AM; Oakville, ON, Canada.

— Задача: имеется однотипные текстовые файлы в которых часто приходится удалять определённое количество символов в начале каждой строки (одинаковое для всех строк) и при этом строки должна начинаться с заглавной буквы.

— „Изваял“ такую команду
Код: (bash) [Выделить]
sed -i  "s/.\{5\}\(.\)/\u\1/" file.txtвроде работает…

— Хотелось бы спросить знающих и понимающих это правильно „академически“ ? :)

— И попутно, как достичь того, чтобы не удаляя символов в начале строки изменить регистр символа находящегося на конкретном расстоянии от начала строки. Т.е. Например сделать заглавным 5 символ от начала строки? Тоже иногда требуется для другой группы текстовых файлов…



Пользователь решил продолжить мысль 22 Июля 2015, 06:18:39:
2015 Jul 21; 11:18 PM; Oakville, ON, Canada.

Код: (bash) [Выделить]
sed -i "s/^\(.....\)/\u\1/" file.txt— Не меняет регистр в шестом поле :(
Код: (bash) [Выделить]
sed -i "s/^\(.\)/\u\1/" file.txt— Меняется только в начале строки регистр вот такой командой…
« Последнее редактирование: 22 Июля 2015, 06:18:39 от adawdp »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Если работает как надо — это уже «правильно»! ;)
  • Если надо просто удалить сколько-то символов — проще использовать cut -c 6-
  • для того чтоб 5-й символ сделать заглавным я бы сделал так sed 's/./\u&/5'
  • чтоб не путаться с экранированием я бы использовал параметр -r
  • если брать за основу Ваш вариант, то надо так sed -r 's/(.{4})(.*)/\1\u\2/'
  • соответственно с удалением я бы делил на 2 команды sed -r 's/.{5}//;s/./\u&/'
Не знаю насколько это «академически», просто мысли вслух…
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
2015 Jul 22; 07:39 AM; Oakville, ON, Canada.

— Спасибо Azure, теперь я стал чуть умнее, не совсем же дураком на пенсию идти :) !
(Нажмите, чтобы показать/скрыть)

 

Страница сгенерирована за 0.016 секунд. Запросов: 21.