Я хочу найти несколько предложений с помощью grep - и я знаю, что можно использовать конвейер |
для ИЛИ предложений; Итак, вот тест, который я пробую на MSYS2, Windows 10:
$ uname -s
MSYS_NT-10.0-18363
$ git --version
git version 2.25.2
$ grep --version | head -1
grep (GNU grep) 3.0
$ git clone https://github.com/xythobuz/avrSerial.git
...
$ cd avrSerial/
$ grep -r 'SERIALDATA\|UART_INTERRUPT_MASK' . --include='*.[ch]'
./serial.c:#define SERIALDATA 0
./serial.c: rxBuffer[uart][rxWrite[uart]] = *serialRegisters[uart][SERIALDATA];
./serial.c: *serialRegisters[uart][SERIALDATA] = sendThisNext[uart];
./serial.c: *serialRegisters[uart][SERIALDATA] = txBuffer[uart][txRead[uart]];
./serial.c: serialRegisters[uart]->CTRLA &= ~(UART_INTERRUPT_MASK << 2); // TXCINTLVL
./serial_device.h:#define UART_INTERRUPT_MASK 0x03
Итак, просто grep
отлично работает здесь, с несколькими предложениями с трубкой.
Однако, Я хотел бы знать, в каких функциях C встречаются совпадения предложений / ключевых слов, поэтому я пытаюсь использовать git grep
с переключателем -p
:
$ git grep -p 'SERIALDATA\|UART_INTERRUPT_MASK' -- '*.[ch]'
$
... и абсолютно ничего возвращается для того же предложения.
Однако, если я повторю этот тест на Ubuntu:
$ echo `uname -s` `cat /etc/issue | head -1`
Linux Ubuntu 18.04.4 LTS \n \l
$ git --version
git version 2.17.1
$ grep --version | head -1
grep (GNU grep) 3.1
# same procedure with git clone, cd ... grep -r works the same too; but git grep -p is different:
$ git grep -p 'SERIALDATA\|UART_INTERRUPT_MASK' -- '*.[ch]'
serial.c:#define SERIALDATA 0
serial.c=static void serialReceiveInterrupt(uint8_t uart) {
serial.c: rxBuffer[uart][rxWrite[uart]] = *serialRegisters[uart][SERIALDATA];
serial.c=static void serialTransmitInterrupt(uint8_t uart) {
serial.c: *serialRegisters[uart][SERIALDATA] = sendThisNext[uart];
serial.c: *serialRegisters[uart][SERIALDATA] = txBuffer[uart][txRead[uart]];
serial.c: serialRegisters[uart]->CTRLA &= ~(UART_INTERRUPT_MASK << 2); // TXCINTLVL
serial_device.h=uint8_t const serialBits[UART_COUNT][UART_BITS] = {{
serial_device.h:#define UART_INTERRUPT_MASK 0x03
... вот это работает?!
Кто-нибудь знает почему различное поведение по отношению к git grep
в этих системах? Есть ли параметр конфигурации git, который я должен включить, или это регресс в git
, или, может быть, есть проблемы с экранированием оболочки на MSYS2?
Или в целом - как я могу получить то же самое своего рода ответ git grep
на MSYS2, как я получаю его на Ubuntu?