LINUX.ORG.RU

bash (вопрос новичка)

 


0

2

подскажите пожалуйста простой синтаксис: не знаю, как написать простую строчку кода, вместо того, чтобы накручивать многоэтажный скрипт задача: команда grep отрабатывает, и в качестве результата даёт много правильных строк, но эти строки нужно отредактировать (вид строки в общем виде): <разный_мусор>http://www.aaa.bbb<разный_мусор> (нужно оставить): http://www.aaa.bbb проблема в том, что это не одна строка, а неизвестное заранее количество строк. есть ли простой рецепт - как вытащить из этих строк нужные части и записать в файл (>>) или в переменную =$Var заранее спасибо

извините, что разбиение на абзацы съехало

qwertyqw
() автор топика
Ответ на: комментарий от ziemin

grep ... | sed '.*\(http://.*\)\s/\1/'

sed: -e выражение #1, символ 1: неизвестная команда: `.' (разумеется, grep ..., я заменил на правильную команду при тестировании) ЧтоЯДелаюНеТак?

qwertyqw
() автор топика
Ответ на: комментарий от flant

нет, все строки правильные (хоть и с мусором)

qwertyqw
() автор топика

По какому признаку определяется, когда начинается разный мусор после нужной части?

grep ... | sed "s/.*\(http\:\/\/.*\)/\1/"
Вот так команда ziemin должна выглядеть, похоже.

rickdias
()
Ответ на: комментарий от rickdias

.bbb это расширение файла. всё что после — мусор

grep ... | sed «s/.*\(http\:\/\/.*\)/\1/»

прогресс есть: команда отрезала весь мусор ДО.

qwertyqw
() автор топика
Ответ на: комментарий от qwertyqw

подскажите пожалуйста: как теперь отрезать всё после расширения .bbb?

qwertyqw
() автор топика
Ответ на: комментарий от TGZ

результат тот же... было

<разный_мусор>http://www.aaa.bbb<разный_мусор>

текущий результат:

http://www.aaa.bbb<разный_мусор>

нужен результат:

http://www.aaa.bbb

(где .bbb - это расширение файла, а не 3 повторяющиеся буквы)

qwertyqw
() автор топика
Ответ на: комментарий от qwertyqw
grep ... |sed "s/.*\(http:\/\/www.[a-z]*.[a-z]*\).*/\1/"

Я понял так, что расширение это любое число латинских символов. Как только встретилось что-то другое - начинается мусор. В любом случае сегодня лучше уже не придумаю ничего.

rickdias
()
Ответ на: комментарий от rickdias

почему то не работает... (вообще, даже первую часть не отрезает) нет, .bbb - это шаблон, который гарантированно встречается только один раз за всю строку, и он точно совпадает с этими символами. т.е. это не .bbbb и не .bbbasdfsdfs, а именно .bbb Может быть сделать его в виде переменной - «$Param» ?

qwertyqw
() автор топика

Покажи кусок того, что нужно обработать. Если прям боишься что тут кто-то твои данные сможет использовать символы поменяй, но только на взаимозаменяемые - мне кажется если увидеть что ты там воротишь можно будет найти простое решение проблемы.

alozovskoy ★★★★★
()
Ответ на: комментарий от qwertyqw

<разный_мусор>

Я подумал, что он завернут в тег. При условии, что расширение из трех символов:

sed -rn '/http/ s/.+(http:\/\/.+\..{3}).*/\1/p' file

TGZ ★★★★
()
Ответ на: комментарий от alozovskoy

пример строки

разные буквы (рус, лат, пробелы), и спец символыhttp://www.site.ru/file.txtразные буквы (рус, лат,пробелы), и спец символы

нужная часть строки определяется однозначно: после http://, но до .txt (границы включены)

qwertyqw
() автор топика
Ответ на: комментарий от qwertyqw

следует читать

разные буквы (рус, лат, пробелы), и спец символыhttp://www.site.ru/file.txt разные буквы (рус, лат,пробелы), и спец символы

qwertyqw
() автор топика
Ответ на: комментарий от TGZ

sed -rn '/http/ s/.+(http:\/\/.+\..{3}).*/\1/p' file

Спасибо, работает.

а можно ли добавить(изменить на) определение конца строки по шаблону .txt , а не по количеству букв?

qwertyqw
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.