grep с ^ (кареткой) не работает в первой строке - PullRequest
0 голосов
/ 07 сентября 2018

Я бы хотел перехватить всю часть раздела командой 'grep'.Тем не менее, я не могу сопоставить свое выражение с файлом в первой строке, но преуспевает в другой строке.Я обнаружил, что проблема может быть связана с типом файла, но я не знаю, как ее решить, если мне не разрешено изменять тип файла.Я умоляю о решении. Спасибо.

$> file test.ini
test.ini: UTF-8 Unicode (with BOM) text

$> cat test.ini
[isp_info]
reg_img_widthm1 = 100
[isp_blc0]
reg_blc_enable = 0
[isp_dpc0]
reg_dpc_enable = 0

$> grep '^\[.*]$' test.ini
[isp_blc0]
[isp_dpc0]

Однако

$> file test.ini.ascii
test.ini.ascii: ASCII text

$> cat test.ini.ascii
[isp_info]
reg_img_widthm1 = 100
[isp_blc0]
reg_blc_enable = 0
[isp_dpc0]
reg_dpc_enable = 0

$> grep '^\[.*]$' test.ini.ascii
[isp_info]
[isp_blc0]
[isp_dpc0]

1 Ответ

0 голосов
/ 07 сентября 2018

Если вы не возражаете против спецификации, включенной в первый результат, вы можете добавить дополнительный шаблон спецификации в начале регулярного выражения:

grep -E $'^(\xEF\xBB\xBF)?\[.*]$' file

или совместимый с BRE POSIX:

grep $'^\(\xEF\xBB\xBF\)\{0,1\}\[.*]$' file

Детали шаблона

  • ^ - начало строки
  • (\xEF\xBB\xBF)? (= \(\xEF\xBB\xBF\)\{0,1\} BRE) - необязательная последовательность символов спецификации UTF8
  • \[ - [
  • .* - любые 0+ символов
  • ] - ] char
  • $ - конец строки

В качестве альтернативы удалите спецификацию и выполните команду grep:

sed '1s/^\xEF\xBB\xBF//' file | grep '^\[.*]$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...