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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Замена в начале строки  (Прочитано 335610 раз)

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

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6754
  • 20% Cooler
    • Просмотр профиля
Замена в начале строки
« : 01 Октября 2023, 16:58:01 »
Как проще всего заменить начало строки?
Пример
строка1: 1234567890
строка2: ABCD
ожидаемый результат: ABCD567890

Через подсчёт символов кажется как-то громоздко. Может, есть проще варианты?
(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Irshat

  • Активист
  • *
  • Сообщений: 554
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #1 : 01 Октября 2023, 19:22:32 »
ALiEN175, ну мне кажется не вам такие вопросы задавать? )))
sed разве не может?
я например типа такого сделал
sed -i 's/ABCD/ABCD567890/g' test.txtвывод
Цитировать
1234567890
ABCD567890

Пользователь добавил сообщение 01 Октября 2023, 19:48:53:
1234567890
усложнил, добавил строк, ни фига не прокатило )), что-то я слишком рано обрадовался, что умнее ALiEN175 )))

Пользователь добавил сообщение 01 Октября 2023, 19:56:53:
пробнул так, но вроде прокатило
Цитировать
irshat@mxuntu:~$ sed 's/\(1234\)/ABCD/g' test.txt
ABCD567890
ABCD567890
234567890
4234567890
irshat@mxuntu:~$
« Последнее редактирование: 01 Октября 2023, 19:56:53 от Irshat »

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6754
  • 20% Cooler
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #2 : 03 Октября 2023, 20:50:06 »
но вроде прокатило
не, смысл в подстановке одной строки в другую.
У вас в sed просто замена 1234 -> ABCD. А ещё и с ключом /g - заменит вообще все вхождения.

Представьте, что содержание строк вам неизвестно.

Пользователь добавил сообщение 03 Октября 2023, 20:55:49:
P=${#M}
echo $M${N:P}
Работает для любых строк M и N, при условии что M не длиннее N.
« Последнее редактирование: 03 Октября 2023, 20:55:49 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн serg7777

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #3 : 03 Октября 2023, 23:10:15 »
sed 's/^1234/ABCD/' input.txt

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6754
  • 20% Cooler
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #4 : 03 Октября 2023, 23:19:54 »
sed 's/^1234/ABCD/' input.txt
Представьте, что содержание строк вам неизвестно.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн serg7777

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #5 : 03 Октября 2023, 23:45:48 »
Неправильно понял условия, невнятно написано.
Представьте, что содержание строк вам неизвестно.
В смысле неизвестно? Мне и не надо знать содержание строк, мне надо знать что на что менять.
А что делать если строка пустая или короче чем замена?
« Последнее редактирование: 03 Октября 2023, 23:49:51 от serg7777 »

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6754
  • 20% Cooler
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #6 : 03 Октября 2023, 23:53:36 »
невнятно написано.
я ж даже код уже работающий привёл, вопрос в оптимизации. 
А что делать если строка пустая или короче чем замена?
Без разницы. Проверки все пройдены. Вопрос о оптимальной подстановке одной строки в начало другой с заменой.
Конкретный вопрос: всё-таки считать символы, или проще вариант есть?

Пользователь добавил сообщение 03 Октября 2023, 23:59:40:
мне надо знать что на что менять.
Короткую строку подставить в начало длинной, чтобы длина длинной строки не изменилась.
« Последнее редактирование: 03 Октября 2023, 23:59:40 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн serg7777

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #7 : 04 Октября 2023, 02:03:48 »
Т.е. имеется в виду когда образец поиска и образец замены являются переменными?
Если так то пожалуйста, ничего в синтаксисе не меняется:
export SEARCH=1234
export REPLACE=ABCD
sed 's/^'$SEARCH'/'$REPLACE'/' input.txt

Оффлайн ALiEN

  • Автор темы
  • Администратор
  • Старожил
  • *
  • Сообщений: 6754
  • 20% Cooler
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #8 : 04 Октября 2023, 08:51:05 »
REPLACE=ABCD
А как предлагаете замену высчитывать?

Пользователь добавил сообщение 04 Октября 2023, 08:54:53:
Давайте так тогда
N=$(tr -cd A-z < /dev/urandom | head -c32) #Длинная строка
M=$(tr -cd A-z < /dev/urandom | head -c16) #Подставить в начало длинной с заменой
« Последнее редактирование: 04 Октября 2023, 09:01:34 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн serg7777

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: Замена в начале строки
« Ответ #9 : 04 Октября 2023, 12:42:54 »
Все, дошло наконец до меня задание :)
Если проверки пройдены то ваш вариант самый простой наверно, вовлекается только шелл.
Альтернативный вариант если надо обработать файл или проверок не было
export M=ABCDE
sed 's/^.\{'${#M}'\}/'$M'/' input.txt

Тест:
user@asus:~$ export M=ABCDE
user@asus:~$ echo 1234567890 | sed 's/^.\{'${#M}'\}/'$M'/'
ABCDE67890
user@asus:~$

« Последнее редактирование: 04 Октября 2023, 12:45:55 от serg7777 »

 

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