Я написал некоторый код Python, который делает это. Можно найти его в моем проекте с открытым исходным кодом.
http://code.google.com/p/pycopia/source/browse/trunk/core/pycopia/OS/Linux/event.py
При выполнении того модуля как сценария как корень, Вы видите демонстрацию в действии.
Эта основная функциональность была расширена для другого проекта, powerdroid, который обеспечивает более конкретную реализацию для встроенной системы (Android).
http://code.google.com/p/powerdroid/source/browse/trunk/src/droid/devices.py
Для нахождения пространства необходимо использовать [:space:]
в другой паре скобок, которые будут похожи [[:space:]]
. Вы, вероятно, означали выражать grep -E '^[[:space:]]*h'
Для объяснения, почему текущий перестал работать:
В настоящий момент [:space:]*h
включает класс символов, ища любой из символов: :
, s
, p
, a
, c
, и e
которые происходят любое количество раз (включая 0), сопровождаемый h
. Это соответствует Вашей строке очень хорошо, но если Вы работаете grep -o
, Вы найдете, что только соответствовали h
, не пространство.
Если Вы добавляете карат к началу, или одна из тех букв или h
должен быть в начале строки для соответствия, но ни один не, таким образом, она не соответствует.
Похож на него, принимает это [:space:]
только появится в рамках выражения скобки (выделенные соответствия с *):
echo 'hello' | grep -E '^[:space:]*h'
*h*ello
echo 'hello' | grep -E '[^[:space:]]*h'
*h*ello
echo ' hello' | grep -E '^[[:space:]]*h'
* h*ello
Это объяснено следующим отрывком от man grep
(мое выделение):
Наконец, определенные именованные классы символов предопределены в рамках выражений скобки [...] Примечание, что скобки в этих именах классов являются частью символьных имен и должны быть включены в дополнение к скобкам, разграничивающим выражение скобки.