Полезные Забавы


ramok аватар

Заменить повторяющиеся пустые строки на одну пустую строку

Допустим у вас есть файл в котором множество повторяющихся пустых строк. А вам
хотелось бы повторяющиеся пустые строки заменить на одну пустую строку (что бы
было легче читать например).

sed -e ':a;/^$/N;/\n$/{D;ba}' file.txt

Примечание:


В *BSD системах, однострочник придется оформить так:

sed -e :a -e '/^$/N;/\n$/{D;ba' -e '}' file.txt

так как после имени метки и перед } необходим перевод строки.

Объяснение как это работает

0
Ваша оценка: Ничего

Удалённое выключения компа без входа в систему

В консоли от root выполняем следующие действия:

# adduser smile -u 0 -g 0 -d / -s /bin/smile
# cat > /bin/smile

внутри cat пишем:

#!/bin/sh
shutdown -h now

жмём ctrl+d и далее выполняем:

# chmod +x /bin/smile
# echo /bin/smile >> /etc/shells

Теперь с другой консоли или через ssh вползаем в систему под юзером smile

0
Ваша оценка: Ничего

Информер в консоли

Этот однострочник забирает и чистит "погодный информер" с gismeteo.ru, и может использоваться например в conky или в .bashrc

curl -s http://informer.gismeteo.ru/text/33345-1.JS|sed -e 's/^.*write("//g'|\
    sed -e 's/\(<[^>]*>\)\+/\n/g'|sed -e 's/");//g'|iconv -f cp1251 -t UTF-8
0
Ваша оценка: Ничего

Kukushka-clock Update

Обновлен пакет kukushka-clock до версии 0.4.0

Качается здесь (Debian):
http://linsovet.com/node/701

0
Ваша оценка: Ничего
ramok аватар

Алгоритм подсчета кол-ва бит в числе

смотрим функцию bit_set_cnt()
работает, но сам алгоримт неочевиден Ж:-)

/* подсчет кол-ва бит в числе */
#include <stdio.h>
 
int bit_set_cnt(unsigned long);
 
int main()
{
    unsigned long i = 0xff;
 
    while(i--)
        printf ("i = %#x, set bit count = %d\n", i, bit_set_cnt(i));
 
    return 0;
}
 
int bit_set_cnt(unsigned long i)
{
    int cnt = 0;
    while (i)
    {
       i &= i - 1;
       cnt++;
    }
    return cnt;
}
0
Ваша оценка: Ничего
ramok аватар

перевод чисел между 10 и 16-тиричными системами исчисления в консоли

#1) sh

$ printf "%x\n" 29
$ printf "%d\n" 0x2c
$ let 0xff     # в OpenBSD не работает, в GNU и FreeBSD работает
$ echo $((16#2c)) # в FreeBSD не работает, в GNU и OpenBSD работает
$ echo $((0xff)) и echo $((077))

#2) bc

$ echo "obase=16;29" | bc
$ echo "ibase=16;2C" | bc

#3) dc

$ echo 29 | dc -e "16o?p"
$ echo 2C | dc -e "16i?p"

#4) awk

$ echo 29 | awk '{printf "%x\n", $0}'
$ echo 0x2c | awk '{print strtonum($0)}'

#5) perl

$ echo 29 | perl -ne 'printf "%x\n", $_'
$ echo 2c | perl -ne 'print hex $_'

я знаю есть еще множество способов, предлагайте еще! Ж:-)
как минимум редствами bash, zsh, sed (видел и такое Ж:-)

0
Ваша оценка: Ничего
ramok аватар

Перевод шеснадцатиричного представления IP в стандартную форму в конс

перевод hex IP -> dec IP

1) bash only by ams

$ i=ffffffc0; echo $((0x${i:0:2})).$((0x${i:2:2})).$((0x${i:4:2})).$((0x${i:6:2}))

2) так короче но $[] dericated

$ i=ffffffc0; echo $[0x${i:0:2}].$[0x${i:2:2}].$[0x${i:4:2}].$[0x${i:6:2}]

3) тоже вроде только для bash как имеющий опцию -n в read

$ echo ffffffc0 | while read -n 2 D; do [ -z $D ] || printf "%d." 0x$D; done; echo

4) sh+sed

$ printf "%d.%d.%d.%d\n" `echo ffffffc0 | sed 's/\(..\)\(..\)\(..\)\(..\)/0x\1 0x\2 0x\3 0x\4/'`

5) тоже но немного разбираясь в sed Ж:-)

$ printf "%d.%d.%d.%d\n" `echo ffffffc0 | sed 's/\(..\)/0x\1 /g'`

6) printf only by ams. но это только смотреть, пайпы не пройдут Ж:-)
 

0
Ваша оценка: Ничего