Grep и отфильтровывать значения из файла

Как правило, это плохая идея, которая переопределяет поведение браузера по умолчанию.

Спрашивается также несколько похожих вопросов,

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

(function (global) { 

    if(typeof (global) === "undefined") {
        throw new Error("window is undefined");
    }

    var _hash = "!";
    var noBackPlease = function () {
        global.location.href += "#";

        // making sure we have the fruit available for juice (^__^)
        global.setTimeout(function () {
            global.location.href += "!";
        }, 50);
    };

    global.onhashchange = function () {
        if (global.location.hash !== _hash) {
            global.location.hash = _hash;
        }
    };

    global.onload = function () {            
        noBackPlease();

        // disables backspace on page except on input fields and textarea..
        document.body.onkeydown = function (e) {
            var elm = e.target.nodeName.toLowerCase();
            if (e.which === 8 && (elm !== 'input' && elm  !== 'textarea')) {
                e.preventDefault();
            }
            // stopping event bubbling up the DOM tree..
            e.stopPropagation();
        };          
    }

})(window);

Это в чистом JavaScript, поэтому он будет работать в большинстве браузеров. Он также отключит клавишу backspace , но клавиша будет нормально работать внутри полей input и textarea.

Рекомендуемая настройка:

Поместите этот фрагмент в отдельный сценарий и включить его на страницу, где вы хотите этого поведения. В текущей настройке он выполнит событие onload DOM, которое является идеальной точкой входа для этого кода.

Working DEMO!

Протестировано и проверено в следующие браузеры,

  • Chrome.
  • Firefox.
  • IE (8-11) и Edge.
  • Safari.

0
задан Robert Columbia 4 March 2019 в 23:46
поделиться

4 ответа

Если вы уже получаете выходные данные и просто хотите удалить дубликаты, самый простой способ сделать это - скопировать выходные данные для сортировки, а затем uniq, чтобы ваша команда выглядела следующим образом

grep 'resource-name' test.xml | awk -F">" '{print $2}' | awk -F"<" '{print $1}' | sort | uniq
0
ответ дан Ramesh Naidu 4 March 2019 в 23:46
поделиться

Просто оптимизацию скорости сравните с @ stack0114106, которая уже работает

awk -F '[<>]' '$2 == "resource-name" && ! ( $3 in List) { print $3; List[$3] } ' test.xml
0
ответ дан NeronLeVelu 4 March 2019 в 23:46
поделиться

Если вы предпочитаете bash regex, попробуйте следующее:

declare -A name
regex="<remote-name>([^<]+)</remote-name>"

while read -r line; do
    if [[ $line =~ $regex ]]; then
        name["${BASH_REMATCH[1]}"]=1
    fi
done < "test.xml"

for i in "${!name[@]}"; do
    echo "$i"
done
0
ответ дан tshiono 4 March 2019 в 23:46
поделиться

Вы можете сделать это с помощью одной команды awk

awk -F"[<>]" '/resource-name/ && !seen[$3]++ { print $3 } ' test.xml

с вашим примером XML-файла

$ awk -F"[<>]" '/resource-name/ && !seen[$3]++ { print $3 } ' test.xml
CAC040F
CAD040F
CAE040F

$
0
ответ дан stack0114106 4 March 2019 в 23:46
поделиться