Удалить все до символа linux

Shell script : How to cut part of a string

I pasted the contents of your example into a file named so.txt .

$ cat so.txt | awk '< print $7 >' | cut -f2 -d" mt24">
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f2.5%2f" data-se-share-sheet-license-name="CC BY-SA 2.5" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
answered Sep 18, 2010 at 15:46
4
    Thaks this is exactly what I wanted !
    – deimus
    Sep 18, 2010 at 16:00
    1
    useless use of cat and cut. awk can do all of it.
    – ghostdog74
    Sep 19, 2010 at 14:57
    4
    @user229426: You mean unnecessary use of cat and cut, not useless, don't you?
    – Manoj Govindan
    Sep 20, 2010 at 5:00
    This is a great explanation of using awk in combination with cut. I tried to get this exact thing for another use case and struggled a lot with awk man pages and awk tutorials. Thanks a lot for taking the time to explain your code!
    – Kevin G.
    Dec 22, 2015 at 12:28
Add a comment|
3

Use a regular expression to catch the id number and replace the whole line with the number. Something like this should do it (match everything up to "id mt24">

)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f2.5%2f" data-se-share-sheet-license-name="CC BY-SA 2.5" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
)">edited Sep 18, 2010 at 16:12
answered Sep 18, 2010 at 15:51
2
    this method gives 9 and 1 but it should be 9 and 10
    – deimus
    Sep 18, 2010 at 15:57
    Right, I've made a mistake when pasting the sed line. Updated it to work correctly.
    – bluebrother
    Sep 18, 2010 at 16:12
Add a comment|
2

A perl-solution:

perl -nE 'say $1 if /id=(\d+)/' filename

Источник

Sed удаление до знака и после знака

Допустим у меня есть текст (txtxtxtxtxtxtxtxtxtxtxt «qweqweqwe» rfrfrfrfrf) вопрос в том что можно ли с помощью Sed удалить все до первой " и удалить все после последней " и чтобы в тексте осталось только «qweqweqwe»

echo txtxtxtxtxtxtxtxtxtxtxt \«qweqweqwe\» rfrfrfrfrf | sed -r «s|.+ (\».+\") .+|\1|"

Вопрос, почему такой вариант не полностью работает (надо писать в файл только последнее значение выдачи ping, без единиц измерения)

ping 192.168.1.1 > ping | sed = ping | sed -e 's\^.*time=\\; s/ms.*//' > ping

С awk таже хрень, что то тут с потоками я недоганяю

ping 192.168.1.1 | awk -F "[\ ,=]" '' > ping
$ echo 'txtxtxtxtxtxtxtxtxtxtxt "qweqweqwe" rfrfrfrfrf' | perl -nale 'print($F[1])' 

чопорно, но работает: while [ true ] ; do ping -c1 192.168.1.1 | grep -Eo «time=.* » | sed 's/time=//'; sleep 1; done

В файл не пишет, всё тоже самое

awk умеет fflush() , а гнутый sed опцию "-u", для остальных утилит иногда помогает (stdbuf)

Сколько можно штамповать темы об одном и том же? Спрашивай всё в одной. И вообще иди читать man sed , там же всё написано.. Ты уже столько людям мозги паришь одной своей задачей, что уже мог наизусть этот выучить и практикой закрепить за это время.

Psych218 ★★★★★ ( 31.07.17 20:16:14 MSK )
Последнее исправление: Psych218 31.07.17 20:18:01 MSK (всего исправлений: 1)

Спасибо, всё получилось, но раньше я хрень написал какую то, вот правильно:

ping 192.168.1.1 | sed -u 's\^.*time=\\; s/ms.*//' > ping
ping 192.168.1.1 | awk -F "[\ ,=]" '' > pingawk

Источник

Как мы можем удалить текст от начала до некоторого определенного выбранного слова, используя команду sed в Linux

У меня есть простой запрос, связанный с выделением и заменой текста в Linux. Для объяснения вопроса я использую команду sed. У меня есть следующий текст.

Привет мир, я просто текст для отображения.

Теперь я хочу напечатать в hello world только я могу сделать это с помощью следующей команды в Linux.

 echo "hello world, I am just simple text for display." | sed 's/, I am.*//g' 

Теперь я хочу полностью изменить эту функцию, как я могу удалить hello world с помощью простой команды, как sed.
Требуется вывод.Я просто текст для отображения. Будет очень полезно, если будут использоваться команды linux (sed и т. Д.). Спасибо

3 ответа

Чтобы отменить действие вашей команды И сохранить ту же часть строки для сопоставления (при условии, что это единственная исправляемая часть строки и вы хотите избавиться от любой другой части, которая может отличаться), вы можете сделать:

echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g' 
, I am just simple text for display 

Что делает регулярное выражение:

  • ^.*: сопоставление любого символа в начале строки до следующего выражения
  • \( & \): перехватить часть строки, которая соответствует выражению между ними (должно быть экранировано \, иначе они будут соответствовать символу в скобках).
  • Я.*: Матч, который вы нам даете,
  • \ 1: будет заменен результатом совпадения первого подвыражения между круглыми скобками

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

Источник

sed в linux - примеры использования

Утилита sed это мощный потоковый редактор текста с поддержкой регулярных выражений. С помощью sed вы можете заменять шаблоны текста (причем непосредственно в файле!), удалять строки (элементы массива), выводить подходящие по маске строки (подобно grep). Редактор sed поддерживает применение нескольких команд и расширенный синтаксис регулярных выражений (при котором не нужно экранировать спец. символы).

Важно!

В sed нет поддержки опережающих и ретроспективных проверок в регулярках! Для замены с использованием расширенного синтаксиса regex используйте:

find . -type f -name '*.blade.php' -exec perl -p -i -e 's/(? \;
Внимание!

В sed довольно проблемно работать с символом перевода строки! Самое удобное решение - это:

sed [-opt] 's/regex/replace/flag' input-file sed 's/regex/replace/flag' # замена найденных подстрок sed '1,5s/regex/replace/gi' # замена только в указанном диапазоне строк sed -r 's/regex/replace/g' # расширенный синтаксис regex (со спец символами) sed 's/regex//g' # удалить найденные подстроки sed '/regex/d' # удалить строки подходящие по маске sed -n 2p # вывести 2ю строку sed -n '/composer/p' # вывести только строки подходящие по маске sed 's/1-9/&/p' # & при замене означает сам ОБРАЗЕЦ 

В качестве разделителей можно использовать любые символы (напрмиер: # , @ ). Match части (которые внутри круглых скобок) доступны как \1 , \2 , \n .

-p вывести на экран -d удалить -i выполнять изменения непосредственно в файле -n не выводить результат замены/поиска на экран (--quiet, --silent) -e указывает на передачу инструкции (команда замены/удаления или выражение для поиска/фильтрации). Нужен, если Вы передаете более 1 инструкции -E расширенный regex, ближе к JavaScript, Go. Активны спец символы: 3+ -r расширенный regex синтаксис. Спец символы активны по умолчанию (--regexp-extended) -P perl-совместимый regex синтаксис -s consider files as separate rather than as a single continuous long stream (--separate) 

Флаги строки-команды (указывать в конце маски):

g глобальный поиск/замена, а не только первое совпадение i,-l регистро-независимый поиск p, печать найденных подстрок d удалить строки

Примеры

Фильтрация строк

Вывести файлы соответствующие маске:

Строки длиннее 80 символов:

sed -n '/^./p' sed -n '/^./!p' # короче 80 символов 

Замена по шаблону

Заменить строки начинающиеся с:

sed 's/^line_start=.*$/line_start="replacement"/' file

Вывести вхождения (matches) через табуляцию:

Заменить названия файлов (composer на composer-dev):

echo 'aa,bb,xx' | sed "s/xx/cc/g" # aa,bb,cc

Заменить URL в файле (штука в разделителях | , и -i для замены в файле):

sed -i "s|$old_site_url|$new_site_url|g" file.yml

Заменить параметр в конфиге:

sed -ie '/project_file_path *=/ s|=.*$|=/home/pi/apps|' ~/.config/geany/geany.conf

Заменить значение в xml-конфиге:

sed -i -r 's/(name="width" value=")[^"]+"/\148KP"/' /etc/ImageMagick-6/policy.xml

Удалить начальные пробелы (аналог ltrim):

echo " some string" | sed 's/^ *//g' 
echo " test " | xargs echo " test " | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'

Удалить часть приглашения командной строки:

Удаление строк

Удалить из файла строку подходящую шаблону:

Удалить первую строку вывода:

sed 1d # удалить первую строку sed '5, 10d' # удалить строки c 5-й по 10-ю 

Удалить строки от первой до соответствующей regex:

echo '--some string' | sed 's/\(Some\)/New \1/i' # --New some string
Примечание

По умолчанию необходимо экранировать все спец. символы в regex'ах, что крайне затрудняет чтение масок. Для того, чтобы экранировать спец.символы только в случае описания в тексте их самих - включите расширенный режим regex выражений с помощью опции -r .

Удалить последние N=2 символа:

Извлечение подстрок

Вырезать / запомнить последние N=4 символа:

echo "latest" | sed "s/.*\(. $\)/\1/" # test

Источник

Читайте также:  Compare files and directories linux
Оцените статью
Adblock
detector