Как выполнить операцию с отдельными совпадениями в полной строке

Вы можете использовать сценарий bash под названием bu. Поместите этот код в файл bu:

#!/bin/bash
cp "$1" /root/backup

и затем сохраните его в $PATH или добавьте каталог, в который вы поместили файл, в $PATH. Наконец, сделайте скрипт исполняемым: chmod +x bu.

1
19.05.2015, 15:05
2 ответа

Согласно объяснению в комментариях:

sed "
# for lines which starts with if
/^if\b/{
    /==/! {
        # add logic statement to first alphanums after ( 
        s/\((\w\+\)/\1 == 1b'1 /
        # add logic statement to second alphanums after & if it is present 
        s/\(&\!\?(\?\w\+\)/\1 == 1b'1 /
        # if ! sign in section replace 1 by 0 at the end of statement 
        s/\!(\([^']*'\)1 )/ \10 /g
          }
       }
" file

Другой вариант - удалить все, кроме части, которая будет изменен, измените его, чем построите полную строку:

sed "/^if\b/{
        /==/!{
            h
            s/if (.*) //
            x
            s/if (\(.*\)) (.*/\1/
            s/\w\+/& == 1'b1 /g
            s/!(\(.*\)1 )/ \10/g
            s/.*/if (&)/
            G
            s/\n/ /
             }
            }" file
0
29.04.2021, 00:28

Может быть, что-то вроде:

perl -0777 -pe 's{\bif\s*\K\((([^()]++|\((?1)\))*)(?=\))}{
  $& =~ s{([&(])\s*(!?)\s*\(?(\w+\b)\)?(?!\s*(==|'\''))}{
   "$1$3 == 1'\''b".(0+!!$2)}gers}ges'
0
29.04.2021, 00:28

Теги

Похожие вопросы