Linux и solaris - отдельный IP сетевой маски от обычного IP

Я думаю в этом случае, что Вы очень ограничены FAT.

Ваша проблема с исполняемым битом состоит в том вследствие того, что FAT не поддерживает такие полномочия, который является в значительной степени POSIX вещи. Начиная с системной работы UNIX над такими полномочиями файла при монтировании FS, который не поддерживает ее, она будет эмулирована. действительно по умолчанию файловая система VFAT, смонтированная на Linux, будет иметь все файлы, и каталог появляются как 777, но это не означает, что существует фактический исполняемый набор битов на FS.

2
18.06.2013, 22:58
2 ответа

Один путь с awk:

awk '{
    for(i=1;i<=NF;i++) {
        if($i~/^255/) {
            netmask[NR]=i>1?netmask[NR]"\t"$i:$i
        }
        else { 
            regular[NR]=i>1?regular[NR]"\t"$i:$i
        }
    }
}
END {
    for(i=1;i<=NR;i++) {
        if (regular[i]) {
            print regular[i] > "file_with_IPs.txt"
        }
        if (netmask[i]) {
            print netmask[i] > "file_with_only_netmask_ips.txt"
        }
    }
}' file

Тест:

$ ls
file

$ cat file
10.140.4.11    10.140.4.110    
255.255.0.0    255.255.255.0    
10.219.39.188  10.219.39.200
10.219.39.189  10.219.39.145
10.140.4.12    10.140.4.120
10.219.39.138   10.219.39.140
10.219.39.139   10.219.39.239
255.0.0.0        255.255.0.0
255.255.255.128    255.255.255.192

$ awk '{
>     for(i=1;i<=NF;i++) {
>         if($i~/^255/) {
>             netmask[NR]=i>1?netmask[NR]"\t"$i:$i
>         }
>         else { 
>             regular[NR]=i>1?regular[NR]"\t"$i:$i
>         }
>     }
> }
> END {
>     for(i=1;i<=NR;i++) {
>         if (regular[i]) {
>             print regular[i] > "file_with_IPs.txt"
>         }
>         if (netmask[i]) {
>             print netmask[i] > "file_with_only_netmask_ips.txt"
>         }
>     }
> }' file

$ ls
file  file_with_IPs.txt  file_with_only_netmask_ips.txt

$ cat file_with_IPs.txt 
10.140.4.11     10.140.4.110
10.219.39.188   10.219.39.200
10.219.39.189   10.219.39.145
10.140.4.12     10.140.4.120
10.219.39.138   10.219.39.140
10.219.39.139   10.219.39.239

$ cat file_with_only_netmask_ips.txt 
255.255.0.0     255.255.255.0
255.0.0.0       255.255.0.0
255.255.255.128 255.255.255.192
0
27.01.2020, 22:23
  • 1
    еще один вопрос - например, я хочу записать в файл как $file_with_IPs вместо file_with_IPs.txt", (file_with_IPs=/tmp/IPs.txt), когда я установил в awk->, $file_with_IPs, затем awk не знают путь /tmp/IPs.txt, что я должен исправить здесь?? –  yael 20.06.2013, 16:25
  • 2
    Можно установить переменную в BEGIN оператор. Проверьте этот –  jaypal singh 20.06.2013, 16:33

"Дюйм/с сетевой маски", Вы, кажется, подразумеваете, что вещи со всеми битами набора группировались слева. Существует только 32 из них от/0 до/32. Вы могли просто перечислить их в grep операторе (или, лучше, в файле Вы передаете grep -f).

Этот подход утомителен, но легок;

^0\.0\.0\.0$
^128\.0\.0\.0$
^192\.0\.0\.0$
^224\.0\.0\.0$
⋮

Начиная с на самом деле двоичный шаблон, который мы ищем, Вы могли преобразовать его назад в число, затем сделать некоторое битовое жонглирование на нем, чтобы подтвердить, что это соответствует шаблону. Это было бы фактической задачей программирования, тем не менее, не что-то, что Вы бросите вместе с grep.

Хотя можно сделать что-то, соглашаются до н.э. Вот то, как протестировать $ip:

(
    echo 'obase=2';
    echo "$ip" | sed -e 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)/\1*(256^3)+\2*(256^2)+\3*256+\4/'
) bc | grep -q '^1*0*$' && echo yes || echo no

При разрушении его эхо говорит до н.э для вывода в двоичном файле. Затем это sed строка превращает IP-адрес в выражение, для вычислений его числового значения. 255.255.255.0 становится 255*(256^3)+255*(256^2)+255*256+0. Так bc видит:

obase=2
255*(256^3)+255*(256^2)+255*256+0

Это распечатывает 11111111111111111111111100000000, который затем проверяется для соответствия шаблону ^1*0*$ с grep.

Если у Вас будет утилита для преобразования IP в число, то это удалит большую часть сложности выше. Все еще, вероятно, будет медленнее, чем grep со списком шаблонов, все же.

1
27.01.2020, 22:23
  • 1
    , я не уверен если sed синтаксис, также подходящий для solaris? –  yael 18.06.2013, 23:26
  • 2
    , я не уверен, необходимо было бы протестировать его (у меня нет машин Соляриса для тестирования на). Но grep со списком шаблонов будет, это быть указанным POSIX. –  derobert 18.06.2013, 23:31

Теги

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