2016-10-14 6 views
0

Перед:Shell Script: Как использовать команду тройник с SED команды

main 2>&1 | tee -a $log_file; 

Это работает нормально, но она бросает STDERR в $ LOG_FILE, как показано ниже. Я хочу заменить:

"ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)" 

С:

"NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)" 

Я хочу версию и дату, чтобы быть в регулярных выражениях формата.

После:

main 2>&1 | tee -a | sed -i 's|ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)|NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)|g' $log_file; 

Error which are coming at downloading time

Few lines coming at the end(The lines are jumbled)

+2

Таким образом, вы хотите замаскировать ошибку как примечание. Большая сделка. _Зачем_? – arkascha

+0

'tee -a' не будет делать сам по себе. Это должно быть что-то вроде 'main | sed | tee'. – Biffen

+0

главная 2> и 1 | sed -i | | ERROR (версия 5.3.0.0-213, сборка 1 от 2015-02-02_12-17-08 by buildguy): (stderr) | ПРИМЕЧАНИЕ (версия 5.3.0.0-213, сборка 1 от 2015-02 -02_12-17-08 by buildguy): (stderr) | g '| tee -a $ log_file. Это правильно? – SRK

ответ

0

Не могли бы вы попробовать это;

main 2>&1 | sed "/ERROR.*[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}-[0-9]\{3\}.*20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}.*(stderr)/ s/ERROR/INFO/" | tee -a $log_file 

Чтобы найти версию, регулярное выражение;

[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}.[0-9]\{1\}-[0-9]\{3\} : 

Чтобы найти дату, регулярное выражение: например (2015-02-02_12-17-08)

20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\}_[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\} 

если дата, как 2015-12-03 11.37.25, вы должны использовать

20[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}.[0-9]\{2\}.[0-9]\{2\} 
+0

«main 2> & 1 | sed | | ERROR (версия 5.3.0.0-213, сборка 1 от 2015-02-02_12-17-08 by buildguy): (stderr) | ПРИМЕЧАНИЕ (версия 5.3.0.0-213) , build 1 от 2015-02-02_12-17-08 by buildguy): (stderr) | g '| tee -a $ log_file "была моей предыдущей командой, поэтому какие изменения должны быть сделаны. – SRK

+0

Вы могли бы попробовать это; «main 2> & 1 | sed» /ERROR.*5.3.0.0-213.*$(date + '% Y-% m-% d_% H-% M-% S'). */s/ERROR/INFO/"| tee -a $ log_file" –

+0

, если 2015-02-02_12-17-08 не изменяется; «main 2> & 1 | sed» /ERROR.*5.3.0.0-213.*2015-02-02_12-17-08.*/ s/ERROR/INFO/"| tee -a $ log_file" –

1

Вы должны точны ваши потребности, это довольно трудно читать ваш код сейчас.

Существует два вариант здесь:

  • Вы мейнстрим и чередовать его перед сохранением в файл журнала
  • форматируется файл журнала на

Первый вариант конца

Не могу проверить, однако, это должно быть так:

main 2>&1 | SED COMMAND | tee -a $log_file 

Второй вариант

испытано, это работает.

sed -i "s/ERROR (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)/NOTE (version 5.3.0.0-213, build 1 from 2015-02-02_12-17-08 by buildguy) : (stderr)/g" $log_file 

Sed отредактирует файл, указанный в строке из-за опции -i.

REGEX

Если вы хотите изменить все ERROR на ПРИМЕЧАНИЕ, то вы должны просто использовать эту SED команду

sed -i "s/ERROR/NOTE/g" $log_file; 

И если вы хотите быть более конкретным, взгляните на этот ответ: using SED with wildcard

+0

Я не хочу, чтобы ERROR заменяли повсюду. Он должен быть заменен, если он только stderr, а регулярное выражение должно использоваться только для (5.3.0.0-213) и (2015-02-02_12-17-08), потому что они могут измениться в будущем. – SRK

+0

Тогда ответ Мустафы должен сделать трюки, вы можете найти больше информации об этом в ссылке, которую я вам дал. :) – Aks

 Смежные вопросы

  • Нет связанных вопросов^_^