сопоставить по крайней мере два шаблона из другого файла

Если вы подключаетесь к SSH и запускаете приложение X11, и это приложение отображается X11 удаленном компьютере, а не через соединение SSH, есть три возможные причины.

  • Приложение является одним из немногих приложений, которое запускает только один экземпляр для данного пользователя на данном компьютере и уже запущено на другом дисплее.
  • Вы подключаете существующий сеанс Screen или Tmux, который был запущен из локального сеанса GUI. Программа знает, где она должна открыть свое окно из значения переменной среды ДИСПЛЕЕВ . Внутри этого экрана/Tmux переменная среды ДИСПЛЕЕВ остается прежней. Необходимо изменить его при повторном подключении к существующему сеансу: перед подключением к терминальному мультиплексору выполните команду echo $ DISPLAY и установите переменную внутри мультиплексора.
  • Вы сделали что-то непослушное в одном из файлов конфигурации ( .profile , .bashrc и т.д.): вы изменили переменную среды ДИСПЛЕЕВ . Кроме случая подключения к экранному мультиплексору, который был запущен с другого дисплея, не следует устанавливать DISPLAY вручную. Если SSH куда-то и ДИСПЛЕИ не установлен, это означает, что соединение SSH не пересылает X11 соединение, и настройка переменной среды вручную не может помочь.

Поэтому, по всей вероятности, необходимо просмотреть файлы конфигурации и удалить строку, которая повреждает переменную среды ДИСПЛЕЕВ .

-121--228907-

dclient

Самый простой способ - использовать dclient . Я использую это на своем сервере, в сочетании с свободным сервером доменных имен, как dynu.com.

В ссылке имеется дополнительная документация, но ddclient опрашивает динамический IP-адрес клиента. При изменении он отправляет новый адрес dynu.com (например). У вас будет учетная запись в dynu.com, где вы указываете свое настраиваемое имя домена. Затем можно напрямую подключиться к http://yourname.dynu.com , который перенаправляется на IP-адрес клиента.

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

Цифровой IP

Кроме того, если вы не хотите использовать это и предпочитаете размещать цифровой IP где-то, вот старый сценарий, который я использовал. Для поиска локального IP-адреса используется внешняя веб-страница, что является единственным простым способом. Затем по электронной почте отправляется сообщение bar@email.com , но его можно изменить в соответствии с потребностями пользователя. Вы можете запустить это в качестве cron-задания.

#!/usr/bin/env bash

CURRENTIP=$(curl -s http://myip.dnsomatic.com)
# Alternatively, use http://icanhazip.com

if echo $CURRENTIP | grep -qE '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ; then
  if ! cmp --quiet <(echo $CURRENTIP) /home/pi/.myipaddress ; then
    echo "IP address changed to ${CURRENTIP}"
    echo $CURRENTIP > /home/foo/.myipaddress
    echo -e "Foo's IP address has changed to ${CURRENTIP} .\n" | mail -s 'Change of IP address' bar@email.com
  fi
  else
    echo "ERROR: IP address enquiry returns ${CURRENTIP}"
fi

-121--108258-

При ответе на этот вопрос кто-то фактически подделал zsh-syntax-hightightiting и создал гибкую функциональность для окрашивания в соответствии с узорами и множеством вещей на zsh.

Можно также проверить этот ответ . Не знаю, делает ли это твой дубликат, но хорошо. Несмотря на то, что он старый, вы можете попробовать суперкат , так как он работает с regexp, чтобы вы могли соответствовать URL и раскрашивать их.

3
19.05.2018, 00:07
5 ответов

Sería bastante fácil hacer esto con awk, contando el número de campos en cada línea en fileAque son iguales a las cadenas en el archivo include.txt:

awk 'NR == FNR { p[$1]; next }
     {
         c = 0
         for (i = 1; i <= NF; ++i) if ($i in p) c++
         if ( c >= 2 ) print
     }' include.txt fileA

Primero lee el archivo include.txty usa las palabras como claves en una matriz asociativa. Luego lee el segundo archivo y para cada fila, itera sobre los campos y prueba cada uno para ver si coincide con alguna de las claves.

Para cada coincidencia, incrementamos un contador, y si el contador es igual o mayor que dos al final, imprimimos la línea.


Formulación alternativa del código para personas a las que les gusta "una -líneas":

awk 'NR==FNR {p[$1];next} {c=0;for (i=1;i<=NF;++i) if ($i in p) c++} c>=2' include.txt fileA
4
27.01.2020, 21:15

Pude lograr esto con la siguiente grepcepción:

grep -Fwf <(grep -v $(grep -oFwf include.txt fileA | head -1) include.txt) fileA

Esto eliminará uno de los patrones coincidentes de include.txty garantizará que haya al menos otra coincidencia.

0
27.01.2020, 21:15

Otra incomodidad

awk '
  NR==FNR {
    a[NR]=$0
    next }
  !b { b=NR }
  {
    c=$0
    for(i=1;i<b;i++)
        if(!sub("\\<"a[i]"\\>","",c))
            next
  }1
' include.txt file\ A

Try to remove each word from include.txt in each line.

If a word is not remove not print the line.

0
27.01.2020, 21:15
grep -Fwonf include.txt file_A | 
uniq | 
cut -d: -f1 | 
printf '%dp\n' $(uniq -d) | 
ed -s file_A 

Prueba

El contenido de los archivos (archivo _Un más complicado para la prueba):

$ tail -n +1 -- file_A include.txt 
==> file_A <==
data1 khc001 khc002 vp005
data1 fbc001 cs004 khc001
data1 khc001 khc001 vp005
data1 khc002 khc001 vp005

==> include.txt <==
khc001
khc002

Salida

data1 khc001 khc002 vp005
data1 khc002 khc001 vp005
0
27.01.2020, 21:15

Это должно работать, если предположить, что порядок шаблонов такой же, как во входном файле, но не в -порядке:

grep -F " $(tr '\n' ' ' <patterns)" infile
1
27.01.2020, 21:15

Теги

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