] Мне удалось это выяснить, и я решил добавить это сюда для следующего гуглера, который бьется головой об ту же самую стену. [
] [] У меня был набор псевдонимов grep [] и [] [] GREP_OPTIONS [
]. Это привело к тому, что цветовая подсветка оставалась в скрипте, даже при переходе к другой команде. Обычно это не очень хорошо работает с []sed[
].[
]Вот мой .alias и опции:[
] [alias grep='grep -i --color'
export GREP_OPTIONS="--color=always"
]
[]Так что при запуске из скрипта, он не использует команду с псевдонимом и поэтому заставляет цвет всегда быть включенным. Поэтому, когда я проверил свой псевдоним и увидел опцию []--color[
] (что означает []auto[
]), это означает "не выводить цвет, который попадает в другую команду" (как []- sed[
]). [
] Я был сбит с толку, потому что забыл, что я также установил []GREP_OPTIONS[
], поэтому я ожидал, что []grep[
] в сценарии будет иметь цвет []auto[
], установленный по умолчанию на []auto[
] (как это было бы, если бы я не установил глобальную []GREP_OPTIONS[
]). Но не так.[
]Вот мои новые настройки (я считаю, что флаг []-color[
] на []GREP_OPTIONS[
] является избыточным, но я оставляю его там в качестве напоминания):[
alias grep='grep --color=always'
export GREP_OPTIONS="--ignore-case --color"
]
[]Таким образом, в любой момент, когда я нахожусь в командной строке, у меня будет подсветка для всех моих greps (что, как правило, и есть то, что я хочу). Но в скриптах по умолчанию раскрашивание будет выполняться только тогда, когда не будет произведена привязка к другой команде. Мне всё равно придётся добавлять --color=всегда для многих моих сценариев (так как я обычно предпочитаю подсветку в большинстве случаев, даже при подключении к другой команде, если только я никогда не вижу результат)[
]. Это предназначено для замены всех Хотя
цикл в вашем скрипте:
awk '{print substr($0, 31)>("replay_message_" NR-1 ".txt")}' file
Как он работает:
Печать Substr ($ 0, 31)
Это отпечатывает все, кроме первые тридцать тридцать символов строки.
> («replay_message_" NR-1 ".txt")
Это отправляет, что было напечатано в файл, названный в честь номера строки.
Когда команда awk закончится запущена, появится серия файлов в вашем каталоге, например:
$ ls -1 replay_message*
replay_message_0.txt
replay_message_1.txt
replay_message_2.txt
replay_message_3.txt
awk '{sub(/.* E[SD]T [[:digit:]]{4}: /, ""); print >("replay_message_" count++ ".txt")}' file
, как это работает
awk, неявно считывает файл один запись (линия) за раз. Для каждой строки:
Sub (/.* EDT [[: TIGIT:]] {4}: /, "")
Это удаляет временную точку от начала строки.
REGEX соответствует всем до места, часовой пояс (либо EST или EDT), пространство, четыре цифры за год, толстой кишки и пространство.
В качестве альтернативы, если он гарантировал, что ваш Timestamp занимает только 30 символов, то можно использовать более простое замещение:
Sub (/. {30} /, "")
На основании ваших входных файлов вам придется решить, что лучше всего соответствует вашей ситуации.
Печать> («Replay_Message_» Count ++ «.txt»)
Это записывает модифицированную строку в файл, который включает в себя значение
. ++
вызывает значение
, чтобы быть увеличенным к каждой записи.
Если вы знаете, что в формате даты всегда будет шесть полей, разделенных пробелами, вы можете использовать:
cut -d ' ' -f 7-
Если вы знаете, что ваша метка времени всегда занимает 30 символов, то вы может использовать:
cut -c 31-
Если вы знаете, что ваши метки времени заканчиваются цифрой, за которой следует цифра двоеточие, за которым следует пробел, и что ваши данные не включают в себя это. шаблон, вы можете использовать:
sed 's/.*[0-9]: //'
Если у вас есть более специфические требования, вы можете упомянуть их.