LINUX.ORG.RU

sed удалить часть строки

 , ,


0

1

подскажите пожалуйста как в текстовом документе при помощи sed найти строку начинающуюся с link= и удалить после равно все в этой строке до слова test.



Последнее исправление: CYB3R (всего исправлений: 2)

$ echo link= foo test bar test baz | sed -re 's:^link=.*test\s*(.*):\1:'
baz

$ echo link= foo test bar test baz | perl -npe 's:^link=.*?test\s*(.*):\1:'
bar test baz
gv
()
Ответ на: комментарий от DeVliegendeHollander

Только у меня в тексте вместо пробелов подчеркивание _, наверно по этому не срабатывает, а так спасибо большое, буду думать как подправить

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

Подчёркивания никак не влияют на работу sed — всё должно работать:

$ echo "link=this_is_url_and_test_rest_of_string" | sed 's/\(^link=\)\(.*\)\(test.*\)/\1\3/'
link=test_rest_of_string
DeVliegendeHollander ★★
()
Ответ на: комментарий от laragofplay

echo 'link=this_is_url_and_test_rest_of_string' | sed -e '/link=/ s:=.*_test_:=test_:'
Элементарно же.

quantum-troll ★★★★★
()
Ответ на: комментарий от laragofplay
% echo "link=this_is _url/and/test_rest_of_string" | sed -e '/link=/ s:=.*\(test_\):=\1:'
link=test_rest_of_string

Так?

quantum-troll ★★★★★
()
Ответ на: комментарий от laragofplay

У тебя слэш в строке мешает правильному парсингу. Смотри, как quantum-troll написал.

Подсказка: в sed можно слэши заменять на некоторые другие символы — в частности, на : # и др.

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

Например, так:

$ echo "link=link=this_is _url/and/test_rest_of_string" | sed 's#\(^link=\)\(.*\)\(test.*\)#\1\3#'
link=test_rest_of_string

Или с двоеточиями, как у quantum-troll, тоже работает.

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