Ответы пользователя по тегу sed
  • В файл1 удалить строки из файл2?

    @abcd0x00
    Как в файл1 содержащим строки вида почта:имя:фамилия:возраст удалить те строки которые содержатся в файл2 где указана просто почта

    grep -f file2.txt -v file1.txt >output.txt
    Ответ написан
    Комментировать
  • Как найти и заменить второе вхождение?

    @abcd0x00
    text="\
    abc
    hello: \"\"
    def
    hello: \"\"
    ghi
    hello: \"\"
    jkl
    hello: \"\"
    mno\
    "
    
    echo "$text"
    
    echo "$text" | sed '
      /hello: ""/ {
        x
        /^\.$/ {
          x
          s/""/"world"/
          x
        }
        s/^/./
        x
      }
    '


    Вывод
    [guest@localhost sh]$ text="\
    > abc
    > hello: \"\"
    > def
    > hello: \"\"
    > ghi
    > hello: \"\"
    > jkl
    > hello: \"\"
    > mno\
    > "
    [guest@localhost sh]$ 
    [guest@localhost sh]$ echo "$text"
    abc
    hello: ""
    def
    hello: ""
    ghi
    hello: ""
    jkl
    hello: ""
    mno
    [guest@localhost sh]$ 
    [guest@localhost sh]$ echo "$text" | sed '
    >   /hello: ""/ {
    >     x
    >     /^\.$/ {
    >       x
    >       s/""/"world"/
    >       x
    >     }
    >     s/^/./
    >     x
    >   }
    > '
    abc
    hello: ""
    def
    hello: "world"
    ghi
    hello: ""
    jkl
    hello: ""
    mno
    [guest@localhost sh]$

    Ответ написан
    5 комментариев
  • Как в консоли сделать замену подстрок в Linux?

    @abcd0x00
    func()
    {
        cat <<EOF
    int i;
       cout << "hello!" << endl;
       printf("%s", "hello");
       printf("%s", "world");
    EOF
    }
    
    func
    
    func | sed '/hello/ s%^%//%'


    [guest@localhost sh]$ func()
    > {
    >     cat <<EOF
    > int i;
    >    cout << "hello!" << endl;
    >    printf("%s", "hello");
    >    printf("%s", "world");
    > EOF
    > }
    [guest@localhost sh]$ 
    [guest@localhost sh]$ func
    int i;
       cout << "hello!" << endl;
       printf("%s", "hello");
       printf("%s", "world");
    [guest@localhost sh]$ 
    [guest@localhost sh]$ func | sed '/hello/ s%^%//%'
    int i;
    //   cout << "hello!" << endl;
    //   printf("%s", "hello");
       printf("%s", "world");
    [guest@localhost sh]$
    Ответ написан
    Комментировать
  • Как заставить sed искать не с начала строки с квантификатором '*'?

    @abcd0x00
    [guest@localhost ~]$ echo 'abcd' | sed 's/bb*//'
    acd
    [guest@localhost ~]$


    abcd (почему?!!)

    Ты не понимаешь, как он работает. b* совпадает с пустотой. А пустота где? Пустота в начале. Поэтому он берёт эту пустоту совпавшую и заменяет на пустоту.

    Добавим замену на x и видим это наглядно
    [guest@localhost ~]$ echo 'abcd' | sed 's/b*/x/'
    xabcd
    [guest@localhost ~]$


    Если же ты поставишь там в конце g, это совсем по-другому работает
    [guest@localhost ~]$ echo 'abcdabcd' | sed 's/b*/x/g'
    xaxcxdxaxcxdx
    [guest@localhost ~]$

    Это совсем не то, что надо (он заменил все пустоты и все b).

    Поэтому, если тебе надо заменить только первое вхождение с b, используется либо +, либо аналог плюса через звёздочку
    [guest@localhost ~]$ echo 'abcdabcd' | sed 's/bb*/x/'
    axcdabcd
    [guest@localhost ~]$
    Ответ написан
    1 комментарий
  • Как правильно экранировать строку для sed?

    @abcd0x00
    [guest@localhost ~]$ s='hello allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> hello'
    [guest@localhost ~]$ 
    [guest@localhost ~]$ src='allow="127\\\.\\d+\\\.\\d+\\\.\\d+|::1|0:0:0:0:0:0:0:1" />'
    [guest@localhost ~]$ dst='allow="^.\\*$" />'
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$s"
    hello allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> hello
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$src"
    allow="127\\\.\\d+\\\.\\d+\\\.\\d+|::1|0:0:0:0:0:0:0:1" />
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$dst"
    allow="^.\\*$" />
    [guest@localhost ~]$
    [guest@localhost ~]$ echo "$s" | sed "s%$src%$dst%g"
    hello allow="^.\*$" /> hello
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как вырезать текст между двумя тэгами в xml?

    @abcd0x00
    Сначала готовишь текст, чтобы было поудобнее, потом обрабатываешь. Из-за этого два раз sed вызывается.
    text="\
    a
    b
    c
    x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
      Туалетная вода-спрей
      &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
      &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
     &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
      Туалетная вода-спрей
      &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
      &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
     &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    d
    e
    f
    "
    
    echo -n "$text"
    
    echo -n "$text" | sed 's%<description>%&x|||%g; s%</description>%|||x&%g' \
                    | sed '/x|||/ { :join N; /|||x/! b join ; s/x|||.*|||x// }'

    Вывод
    [guest@localhost ~]$ text="\
    > a
    > b
    > c
    > x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
    >   Туалетная вода-спрей
    >   &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
    >   &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
    >  &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    > x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
    >   Туалетная вода-спрей
    >   &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
    >   &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
    >  &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    > d
    > e
    > f
    > "
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo -n "$text"
    a
    b
    c
    x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
      Туалетная вода-спрей
      &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
      &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
     &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description>
      Туалетная вода-спрей
      &lt;br&gt;ВОСТОЧНЫЙ ФУЖЕР
      &lt;br&gt;Мужчина в стиле ориентирован на успех, целеустремлен и созидателен. Мужественность, достоинство, уверенность – его главные черты,    наряду с чувственностью и романтичностью. Он любит комфорт, красивые вещи,   роскошную жизнь и выражает себя в классическом пок$
     &lt;br&gt;Ключевые слова: Уверенный, динамичный, мужественный, благородный,  элегантный, статусный, успешный</description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    d
    e
    f
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo -n "$text" | sed 's%<description>%&x|||%g; s%</description>%|||x&%g' \
    >                 | sed '/x|||/ { :join N; /|||x/! b join ; s/x|||.*|||x// }'
    a
    b
    c
    x1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description></description>y1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    x2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<description></description>y2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
    d
    e
    f
    [guest@localhost ~]$

    Ответ написан
    Комментировать
  • Как найти слово в строке и перенести или скопировать его в начало строки?

    @abcd0x00
    [guest@localhost ~]$ text="\
    > bla bla 23.33.72 bla
    > bla bla la na 45.34.33 bla en
    > bla la na 45.34.33 bla urjt
    > "
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo -n "$text"
    bla bla 23.33.72 bla
    bla bla la na 45.34.33 bla en
    bla la na 45.34.33 bla urjt
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo -n "$text" | sed 's/.* \([0-9]*\.[0-9]*\.[0-9]*\) .*/\1 &/'
    23.33.72 bla bla 23.33.72 bla
    45.34.33 bla bla la na 45.34.33 bla en
    45.34.33 bla la na 45.34.33 bla urjt
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как с помощью sed удалить все строки в текстовом файле, начиная с определенной (например, с 5-й)?

    @abcd0x00
    [guest@localhost ~]$ cat /etc/passwd | sed '4q'
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    [guest@localhost ~]$
    Ответ написан
    Комментировать