заменить строку соседней строкой

Я решил эту проблему. Аутентификация при первом POST отправляется в виде данных. Два запроса curl:

curl -X POST \ 'http://192.168.2.42/api/login.json?sessionId=xxxxxxxxxx' \ -H 'accept: application/json, text/plain, /' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -H 'origin: http://192.168.2.42' \ -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36' \ -d '{"mode":2,"userId":"xxxxxxx_x","pwh":"xxxxxxxxxxxxxxxxxxxxxxxxxx="}'

и

curl -X POST \ 'http://192.168.2.42/api/dxs.json?sessionId=xxxxxxxxx' \ -H 'accept: application/json, text/plain, /' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json;charset=UTF-8' \ -H 'origin: http://192.168.2.42' \ -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36' \ -d '{"dxsEntries":[{"dxsId":33556252,"value":3},{"dxsId":33556249,"value":50},{"dxsId":83888896,"value":1},{"dxsId":83888640,"value":true},{"dxsId":33556484,"value":false},{"dxsId":33556239,"value":0},{"dxsId":33556240,"value":82800},{"dxsId":33556247,"value":95}]}'

Оба были получены путем копирования как Curl с помощью инструмента разработки браузера при нажатии соответствующих страниц пользовательского интерфейса. Сохранение полученных таким образом значений sessionId, userId и pwh гарантирует, что команды будут продолжать работать. sessionId должен быть одинаковым для обоих сообщений. Также оказалось, что во втором сообщении я должен был отправить все строковые значения, а не только то, которое нужно обновить.

2
27.04.2020, 20:44
3 ответа
sed 's/[[:alnum:]]*\.\([[:alnum:]_.]*\)/\1.\1/' file

Ищет строку, которая начинается с набора буквенно-цифровых символов, за которыми следует точка. Эта часть строки будет удалена. После них должна быть строка, состоящая из буквенно-цифровых символов, точек или знаков подчеркивания. Все это заменяется второй частью выражения, дважды, с точкой в ​​-между ними.

Учитывая ваши данные в вопросе, это дает

s       scaffold_1.scaffold_1   19037   10      +       13588361        ATAATAAAAT
s       RANA1.RANA1     9000    10      +       13588361        ATAATAAAAT
s       scaffold_5.scaffold_5   19037   10      +       13588361        ATAATAAAAT
s       scaffold_8.scaffold_8   19037   10      +       13588361        ATAATAAAAT
s       SGBE0296.1.SGBE0296.1   68900   10      +       13588361        ATAATAAAAT

Это предполагает, что "имя" соответствует [[:alnum:]]*, а "скаффолд" соответствует [[:alnum:]_.]*.

Чуть более "педантичным" регулярным выражением было бы

sed 's/[[:alnum:]]\{1,\}\.\([[:alnum:]]\{1,\}\([._][[:digit:]]\{1,\}\)\{0,1\}\)/\1.\1/' file

, где ни одна из подстрок по обе стороны от точки не может быть пустой, и где суффикс каркаса(_1или .1и т. д. )сопоставляется необязательно и отдельно от имени каркаса.

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

sed -E 's/[[:alnum:]]+\.([[:alnum:]]+([._][[:digit:]]+)?)/\1.\1/' file

Для заданных данных это выдает результат, идентичный первой команде.

2
19.03.2021, 02:25
awk '{
    sub(/[^.]*\./,"",$2) #From the 2nd field, remove all up to first dot
    $2=$2"."$2           #Replicate the resulting second field
    print
}' file | column -t

Выход:

s  scaffold_1.scaffold_1  19037  10  +  13588361  ATAATAAAAT
s  RANA1.RANA1            9000   10  +  13588361  ATAATAAAAT
s  scaffold_5.scaffold_5  19037  10  +  13588361  ATAATAAAAT
s  scaffold_8.scaffold_8  19037  10  +  13588361  ATAATAAAAT
s  SGBE0296.1.SGBE0296.1  68900  10  +  13588361  ATAATAAAAT
1
19.03.2021, 02:25

Попробуйте это,

awk -F '\t' '{$2=gensub(/\w+\.(.*)/,"\\1.\\1","g",$2);}1' file | column -t

s  scaffold_1.scaffold_1  19037  10  +  13588361  ATAATAAAAT
s  RANA1.RANA1            9000   10  +  13588361  ATAATAAAAT
s  scaffold_5.scaffold_5  19037  10  +  13588361  ATAATAAAAT
s  scaffold_8.scaffold_8  19037  10  +  13588361  ATAATAAAAT
s  SGBE0296.1.SGBE0296.1  68900  10  +  13588361  ATAATAAAAT
0
19.03.2021, 02:25

Теги

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