Список смещений совпадений в строке поиска только BASH (изменено OP) - PullRequest
0 голосов
/ 20 мая 2011

Этот файл демонстрирует типичный @ installhook

он делает то же самое, как если бы вы вызывали apps / install GoFukUrself

и этот файл не существует.

Эта система существует, поэтому мы можем копировать несколько файлов, а не только один файл, если

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

Ответы [ 3 ]

3 голосов
/ 20 мая 2011

Есть:

echo "1,1,2,5,5,5,6,5,4,5,7" | tr ',' '\n' | sort | uniq -c

uniq -c - это важный бит, который подсчитывает количество экземпляров, которые появляются в отдельных строках на его входе. sort требуется uniq. tr разбивает ввод, поэтому в каждой строке есть только одно "слово".

РЕДАКТИРОВАТЬ: Возможно, я неправильно истолковал. Это дает вам count каждого совпадения, что дает вам пример awk, который вы дали.

2 голосов
/ 21 мая 2011

Я не знаю, что вы подразумеваете под "полным соответствием" или откуда вы рассчитываете свои индексы, но я думаю, что вы, возможно, ищете функцию match:

   match(s, r [, a])       Returns the position in  s  where  the  regular
                           expression  r occurs, or 0 if r is not present
1 голос
/ 08 июня 2011
# where: [$] = NAME of a string var, [%] IMMEDIATE VALUE

# example:
# declare container lookfor; declare -i offset;
# .
# .
# string.find container lookfor $offset;

shopt -s extglob    # activate extended regular expression parsing.

declare result;

# offset is optional. -% = undef.
function string.find { : [$]source [$]find [%]offset

    local buffer=${!1} find=${!2} empty='';
    local -i offset=${3:-0};

    [[ $offset -eq 0 ]] || buffer=${buffer:$offset};

    [[ -n "$buffer" ]] || { result=$empty; return 1; }

    #  Matches at front of string?
    [[ "$buffer" =~ ^("$find") ]] && { result=0; return 1; }

    [[ "$buffer" =~ ^(.*|$)?("$find")(.+|$) ]] && {

        let buffer=${#BASH_REMATCH[1]}+$offset;

    } || {

        result=$empty; return 1;

    }

    result=$buffer;

}

function string.find.all { : [$]source [$]find

    local source=${!1} find=${!2} foundlist='' offset=0;

    while string.find source find $offset; do

        foundlist+="$result ";
        let offset=$result+${#find};

    done

    echo $foundlist

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...