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


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

Автор Тема: Как удалить или добавить символ / в конце каждой строки? [Решено]  (Прочитано 1436 раз)

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

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
У меня есть очень много парных (одинаковых) строк, но одна из них всегда заканчивается знаком  /  а другая нет. Нужно удалить или добавить / а затем удалить одну копию и оставить другую.
« Последнее редактирование: 18 Марта 2020, 12:24:05 от zg_nico »

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
ase66, Вам самому понятен заданный Вами вопрос? Потрудитесь пояснить: где у Вас эти строки? На бумаге? В файле? Чем предполагаете обрабатывать файл? Каким-то конкретным текстовым редактором, или рубанком/топором? Я не издеваюсь, - я реально трижды перечитал, и понимаю только то, что ничего не понимаю. Исходя из Вашей постановки задачи, предполагая, что файл текстовый, я бы сделал так:
Код: (bash) [Выделить]
sed -e '/\// d' test.txtВ выводе этой команды будут проигнорированы все строки, которые содержат в себе /, - останутся только те, в которых слешей нет. В примере текстовый файл test.txt - это примерно то, что у Вас, судя по Вашему описанию (путь к файлу указывать полностью, помнить про экранирование пробелов и регистр символов).
(Нажмите, чтобы показать/скрыть)


Пользователь добавил сообщение 07 Января 2020, 12:23:20:
Или вот еще вариант, если нужно чтобы были убраны именно слеши, и после этого оставлены только уникальные записи:
Код: (bash) [Выделить]
sed -e 's:/::g' test.txt | sort | uniq
« Последнее редактирование: 07 Января 2020, 12:23:20 от zg_nico »
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн bezbo

  • Старожил
  • *
  • Сообщений: 1750
    • Просмотр профиля
удалить одну копию

sed -e '/\/$/d' /path/to/read/file > /path/to/save/file*будут удалены все строки оканчивающиеся на /

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
Нельзя удалять все строки с / ибо в списке всегда есть и оригинальные строки.

Мне нужно как-то выровнить парные строки с окончанием / и без него, а потом удалить полные копии. 
Текст содержит десятки тысяч записей без пробелов, по одной в каждой строке.
В каждой строке есть такие символы ://~ + / их нельзя удалять.
Нужно удалить только последний / если он есть (или добавить, смотря что удобнее).

Пример:
https://launchpad.net/~lubuntu-art/+archive/ubuntu/daily/+build/9758799/
https://launchpad.net/~lubuntu-art/+archive/ubuntu/daily/+build/9758801
https://launchpad.net/~lubuntu-art/+archive/ubuntu/daily/+build/9758801/
https://launchpad.net/~lubuntu-ci/+archive/ubuntu/stable-ci/+build/18244987
https://launchpad.net/~lubuntu-ci/+archive/ubuntu/stable-ci/+build/18244987/

Пользователь добавил сообщение 07 Января 2020, 15:57:42:
добавить в конце каждой строки kkk:

sed 's/$/kkk/' 1.txt > 2.txt
затем заменить /kkk и kkk на пустоту (пустой курсор в поле замены в текстовом редакторе)

удалить дубликаты:

sort 2.txt | uniq > 4.txt
« Последнее редактирование: 07 Января 2020, 16:03:53 от ase66 »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
удалить cлеш
sed 's/\/$//' file.txt
Добавить слеш
sed 's/\([^/]$\)/\1\//' file.txt
Удалить повторы
sort -u file.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

 

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