LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Хуже того:

printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\xff' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\xfe' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\x48' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\x00' || echo "false"

из этих команд первые три не матчатся, последние две матчатся.

А ещё:

printf '\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xff\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xfd\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
первая и четвёртая матчатся, вторая и третья нет.

Почему всё так - не знаю. Подозрений два: 1) баг в grep с signed vs unsigned, 2) юникод как-то напакостил

Исправление firkax, :

Хуже того:

printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\xff' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\xfe' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\x48' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\x00' || echo "false"

из этих команд первые три не матчатся, последние две матчатся.

А ещё:

printf '\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xff\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xfd\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
первая и четвёртая матчатся, вторая и третья нет.

Почему всё так - не знаю.

Исходная версия firkax, :

Хуже того:

printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\xff' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\xfe' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\x48' || echo "false"
printf '\xff\xfe\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '\x00' || echo "false"

из этих команд первые три не матчатся, последние две матчатся.

А ещё:

printf '\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
printf '\xff\x48\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00' | grep -PUa '^' || echo "false"
первая матчится, вторая нет.

Почему всё так - не знаю.