Для изменения sendmail конфигурации необходимо изменить sendmail.mc файл восстанавливание конфигураций. Этот материал находится в наше время в /etc/mail
, и после редактирования /etc/mail/sendmail.mc
необходимо работать make
там (извините, установка может варьироваться вполне немного, необходимо будет вырыть в документацию).
Как упоминал @steeldriver, скорее всего, проблема вызвана другим стилем окончания строк, чем то, что ожидает grep
.
Для проверки окончаний строк
Вы можете использовать hexdump
, чтобы проверить, как точно отформатированы окончания строк. Я предлагаю использовать мой любимый формат :
hexdump -e '"%08_ad (0x%08_ax) "8/1 "%02x "" "8/1 "%02x "' -e '" "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt
С выходом проверьте окончания строк : 0a
-> LF
, 0d
-> CR
. Очень быстрый пример может дать нечто подобное :
$ hexdump -e '"%08_ad (0x%08_ax) "8/1 "%02x "" "8/1 "%02x "' -e '" "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt
00000000 (0x00000000) 4e 6f 20 43 4f 57 20 65 6e 64 69 6e 67 0d 0a 45 No COW e|nding..E
00000016 (0x00000010) 6e 64 69 6e 67 20 69 6e 20 43 4f 57 0d 0a nding in| COW..
Обратите внимание на окончания строк в формате dos : 0d 0a
.
Для изменения окончаний строк
Вы можете увидеть здесь или здесь для различных способов изменения окончаний строк с помощью различных инструментов, но для одноразового использования вы всегда можете использовать vi/vim :
vim masternospaces.txt
:set fileformat=unix
:wq
Для grep без изменения чего-либо
Если вы просто хотите, чтобы grep
совпадал независимо от окончания строки, вы всегда можете указать окончания строк вот так:
grep 'COW[[:cntrl:]]*$' masternospaces.txt
Если показана пустая строка, вы можете проверить, действительно ли вы что-то подобрали, используя опцию -v
опции cat
:
grep 'COW[[:cntrl:]]*$' masternospaces.txt | cat -v
Мой личный любимый
Вы также можете как grep, так и стандартизировать вывод, используя -v
:
sed -n '/COW^M*$/{;s/^M//g;p;};' masternospaces.txt
где ^M
получается, набрав на клавиатуре Ctrl-V Ctrl-M
.
Надеюсь, это поможет!
Хотя вы можете использовать «стандартный» синтаксис RegEx с grep (как в ответе @user43791), grep также имеет другие идентификаторы для обозначения границ ввода.
Сопоставители для начала и конца всей строки: \`
(обратная галочка) (вместо ^
) и \'
(апостроф) ( вместо $
).
Таким образом, для исходной команды вы должны использовать:
grep "COW\'" masternospaces.txt
Примечание: также важно отметить, что ?
и +
будут рассматриваться буквально, если вы не экранируете их с помощью \?
и \+
, чтобы сделать их аналогами селекторов в стиле RegEx.
Источник: grep
синтаксис регулярного выражения
В BSD grep вам нужно экранировать "$" и заключить строку в двойные кавычки:
"COW\$"
Еще один способ удалить \r
перед grep:
... | dos2unix | egrep 'COW$' |...
Мне нравится, что это очень ясно, так как я не запоминаю такие вещи, как [[:cntrl:]]
надолго.