удалить строки, оканчивающиеся на регулярное выражение, из другого файла

Вы можете сохранить псевдоним оболочки или функцию в вашем .bashrcили любом другом файле конфигурации вашей оболочки. Например, для псевдонима Bash:

alias my_ssh="
ssh mehrdad@"IP1 ||
ssh tomas@IP2 ||
ssh tomas@IP3
"

Затем вызовите псевдоним:

 my_ssh

И если IP1 дает сбой, ||заставляет выполнить вторую команду. И так снова, теперь с IP3.

Я не проверял это, но все должно быть в порядке. Или, по крайней мере, показывает путь.

Информацию о параметрах SSH, таких как прокси, см. в man ssh.

-1
23.08.2019, 02:27
2 ответа
$ grep -x -f <(sed 's/\./\\./g;s/^/.*/' listB) <(grep -v -F -x -f listB listA)
.best.co
.test.server.cloud.us-east.amazonaws.com
.abc.com.co
.def.museum.hiroshima.jp
.xyz.xxx.yyy.net

Объяснение в виде двух команд:

1.)grep -v -F -x -f listB listA

Удалите литеральные дубликаты из listAи используйте этот вывод в качестве ввода второго grep. Это оставляет эти записиlistA:

.best.co
.test.server.cloud.us-east.amazonaws.com
.abc.com.co
.def.museum.hiroshima.jp
.xyz.xxx.yyy.net
.exe
.xyz.exe

(Оставшиеся строки для удаления:.exeи.xyz.exe)

2.)grep -x -f <(sed 's/\./\\./g;s/^/.*/' listB) <(...)

Избегайте точек .в listB, добавьте .*в начало и снова grep, чтобы сопоставить эти строки, заканчивающиеся строкой в ​​listB. Ввод является результатом первого grep.

1
28.01.2020, 05:09
# save valid extension from listB
vexts=($(sed "s/^.*\.//g" listB))
# loop over listA and filter desired output
while read line; do 
    if [[ " ${vexts[@]} " == *" ${line##*.} "* ]] ; then
        echo "${line}";
    fi
done < listA
0
28.01.2020, 05:09

Теги

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