#regex #sed
#регулярное выражение #sed
Вопрос:
Я хочу заменить команду журнала в файле и вывести в другой файл
моя команда журнала может быть такой
log(xxx);
log ( xxx);
поэтому я использую следующее
cat input.txt | sed -e '/s*logs*(.*)/d' > output.txt
тем не менее, он также заменяет строку на «логическую».
Что я должен изменить, чтобы оно работало.
Спасибо
Ответ №1:
Это решение «belt-n-braces» может сработать:
# sed '/<log>s*([^)]*)/d' <<!
> a
> b
> logical(123)
> log(123)
> log ( 123)
> d
> e
> !
a
b
logical(123)
d
e
Ответ №2:
Не экранируйте круглые скобки; вы хотите, чтобы они были буквальными. (Кроме того, насколько я знаю, sed не поддерживает сокращение класса символов регулярных выражений.)
sed -e '/[ t]*log[ t]*(.*)/d' input.txt > output.txt
Комментарии:
1. Это не решает проблему; оно все равно будет соответствовать «логическому», потому что вы разрешаете ноль или более пробелов.
2. Извините, да; оно не будет соответствовать «логическому», но оно все равно будет соответствовать «dialog (…)» или «slog (…)».
3. @tripleee: верно, я должен добавить еще один символ.
Ответ №3:
Если вы просто хотите удалить строки только с помощью «log», вы можете использовать grep.
grep -vw log input.txt >output.txt
Или, если вы хотите включить только журнал в виде одного слова (а не, например, slog), за которым следует необязательный пробел перед парой круглых скобок с чем-либо между ними, вы можете использовать egrep:
egrep -v '<log[ t]*(.*)' input.txt >output.txt