Экстракт текста из скобок

Создайте для этого собственный модифицированный пакет. Будьте внимательны, чтобы держать его в курсе событий, и, возможно, используйте какой-то специфический для дистрибутива взлом, чтобы избежать его автоматического обновления.

Я не понимаю причину изменения, которое вы предлагаете (никаких знаний Arch вообще), но на первый взгляд это либо то, что вы не должны делать по соображениям безопасности, или, возможно, ваш случай использования достаточно актуален, чтобы гарантировать патч выше по течению, чтобы как-то это сделать. В любом случае, я бы предложил вам обсудить это со знающими людьми, через систему просить сообщений об ошибках/улучшений для вашего распространения.

Или обсудите здесь, чего вы хотите достичь (а не как вы пытаетесь туда пойти, как это делает этот вопрос).

-121--122910-

Порт считается «используемым» всякий раз, когда к нему привязаны разъемы. Они не должны быть в состоянии СЛУШАТЬ, просто связаны. Поэтому TIME_WAIT гнезда, которые вы видите, считаются.

Если какие-либо сокеты привязаны к адресам и портам , это становится немного сложнее. Различные сокеты могут быть привязаны к одному порту, если они привязаны к разным адресам. Но если для этого порта имеется какой-либо сокет, привязанный к групповому адресу ( INADDR _ ANY , показанный netstat как * ), это предотвращает привязку других сокетов к любому адресу и тому же порту.

Обычно большинство программных обеспечений, использующих прослушивающие сокеты, устанавливает опцию SO _ REUSEADDR на этих сокетах. Этот вариант ослабляет правила. С опцией набора только связанный и прослушивающий сокет предотвращает привязку другого сокета к тому же адресу. Это означает, что любые устаревшие TIME _ WAIT и другие сокеты не будут препятствовать немедленному перезапуску и повторной привязке программного обеспечения к тому же порту.

Программа Java, скорее всего, не настройки SO _ REUSEADDR на своем сокете, но должна.

-121--125265-

Требуется места с обеих сторон символов [ и ]] , поскольку они являются командами, а не операторами.

Вам также не нужно позволять , и вам нужно прочитать dec как переменную (т.е. $ dec ).

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

Вы также не нуждаетесь в done в конце, так как нет цикла.

read dec
if [[ "${dec^}" = "Y" ]]; then
  repeat=1
else
  repeat=0
fi
1
25.11.2018, 11:49
3 ответа

Предложено script, которое соответствует вашей окончательной спецификации.

#!/bin/bash

while read line
do
# echo "$line"
 name=${line%% *}
 echo -n "$name "
 data=$(<<< "$line" grep -o '\[GO:.\{7\}\]' | tr '\n' ' ' | sed -e 's/\[//g' -e 's/\]//g')
 echo "$data"
done < "$1"

Тестирование:

$./script input 
Evigen1000005_c0_g1_i1 GO:0018279 GO:0005783 GO:0016021 GO:0016020 GO:0008250 GO:0004579 
Evigen1000006_c0_g1_i1 GO:0000027 GO:0000055 GO:0005730 GO:0005654 GO:0019843 
0
27.01.2020, 23:42

Как насчет

sed -r 's/(^[^[:space:]]* )[^[]*\[/\1/; s/\][^[]*(\[|$)/ /g' file
Evigen1000005_c0_g1_i1 GO:0018279 GO:0005783 GO:0016021 GO:0016020 GO:0008250 GO:0004579 
Evigen1000006_c0_g1_i1 GO:0000027 GO:0000055 GO:0005730 GO:0005654 GO:0019843 O22892-1 

Желаемый результат НЕ отражает обработанный входной образец.

РЕДАКТИРОВАТЬ:или даже

sed -r 's/((^[^ ]* )|\])[^[]*(\[|$)/\2 /g' file

РЕДАКТИРОВАТЬ:с вашим вопросом и желаемым результатом, пересмотренным три раза, попробуйте

sed -r 's/((^[^ ]* )|\])[^[]*(\[GO)/\2 GO/g; s/\].*$//' file
1
27.01.2020, 23:42

Быстрее в sed:

start='\[GO:' end='\]'
sed -e 's,'"$start"$',\1,g' -e 's,'"$end"$',\2,g' \
    -e $'s, [^\1]*,,' -e $'s,\1\\([^\2]*\\)\2[^\1]*,GO:\\1,g' \
    infile

или awk:

awk -vone=$'\1' -vtwo=$'\3' -vstart='\[GO:' -v end='\]' '
           {
            printf("%s ",$1);
            gsub(start,one);
            gsub(end,two);
            sub("^[^"one"]*"one,"GO:")
            gsub(two"[^"one"]*"one," GO:")
            sub(two".*$","")
           }
           1' infile
0
27.01.2020, 23:42

Теги

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