Как правило, это плохая идея, которая переопределяет поведение браузера по умолчанию.
Спрашивается также несколько похожих вопросов,
Вы не может фактически отключить кнопку назад. Однако вы можете использовать магию, используя свою логику, чтобы пользователь не мог перемещаться назад, что создаст впечатление, так как оно отключено. Вот как, посмотрите следующий фрагмент.
(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, которое является идеальной точкой входа для этого кода.
Протестировано и проверено в следующие браузеры,
Если вы уже получаете выходные данные и просто хотите удалить дубликаты, самый простой способ сделать это - скопировать выходные данные для сортировки, а затем uniq, чтобы ваша команда выглядела следующим образом
grep 'resource-name' test.xml | awk -F">" '{print $2}' | awk -F"<" '{print $1}' | sort | uniq
Просто оптимизацию скорости сравните с @ stack0114106, которая уже работает
awk -F '[<>]' '$2 == "resource-name" && ! ( $3 in List) { print $3; List[$3] } ' test.xml
Если вы предпочитаете 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
Вы можете сделать это с помощью одной команды 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
$