2014-12-11 2 views
0

У меня есть следующие sed команды (для замены некоторых содержимого с пространством/Nothing):Sed не принимает мое регулярное выражение

sed "s/.* \[test] \(h\[W/L]-.*\)//g" file.log 

, но это дает мне ошибку, как:

sed: -e expression #1, char 29: unknown option to `s' 

где I» m делает ошибку?

2013-12-04 00:00:39,629 INFO [test] (h[W/L]-75) <a> 
adasdsdads 
asdasdsddsaadsdasds 
</a> 


2013-12-04 00:00:39,629 INFO [test] (h[W/L]-75) <a> 

asdasdsasaasdas 


a 

asdas 
</a> 

Необходимая ОП:

<a> 
adasdsdads 
asdasdsddsaadsdasds 
</a> 


<a> 

asdasdsasaasdas 


a 

asdas 
</a> 
+0

Можете ли вы предоставить ввод вместе с ожидаемым выходом? Escape '[]' для соответствия символам '' '' '' '' '. Для захвата групп это будет '\ (... \)'. Чтобы соответствовать символам '' '' '', шаблон должен быть '()' –

+0

@AvinashRaj: отредактирован квест. – batman

ответ

3

Вы должны избежать / внутри регулярного выражения:

sed "s/.* \[test] \(h\[W\/L]-.*\)//g" file.log 

В противном случае, он рассматривается как e n регулярного выражения. Другим решением является использование другого разделителя, который не используется в шаблоне:

sed "s|.* \[test] \(h\[W/L]-.*\)/||g" file.log 

И если вы пытаетесь соответствовать буквенные круглые скобки, они не должны быть экранированы в sed. Это должно быть:

sed "s|.* \[test] (h\[W/L]-.*)||g" file.log 
+0

Спасибо, что работает. Содержимое файла: '2013-12-04 00: 00: 39629 INFO [Тест] (ч [Вт/л] -75) adasdsdads asdasdsddsaadsdasds 2013-12-04 00: 00: 39629 ИНФО [тест] (ч [Вт/L] -75) asdasdsasaasdas а Asdas ', когда я' СЭД «с /.* \ [тест] \ (ч \ [Вт \/л ] -. * \) // g "file.log" ничего не заменяется. Где я делаю ошибку? – batman

+0

Прочтите последнее предложение моего ответа. – Barmar

+0

Спасибо, что работает сейчас. – batman

0

Попробуйте это:

sed "s/.* \[test] \(h\[W\/L]-.*\)//g" file.log 
+0

'\ (... \)' называется группой захвата в Basic sed. –

1

Вы можете попробовать эту команду sed.

$ sed 's/.* \[test\] (h\[W\/L\]-.*) *//g' file 
<a> 
adasdsdads 
asdasdsddsaadsdasds 
</a> 


<a> 

asdasdsasaasdas 


a 

asdas 
</a> 

<space>* в последний помогает удалить пробелы после последнего ) кронштейна.

+0

Спасибо, что работает :) – batman

0
sed 's#.* \[test] (h\[W/L]-.*)##' file.log 
  • другой разделитель, чем по умолчанию / в s///, здесь #
  • экранирование в () для использования litterla (напротив поведение, чем [)
  • нет использования g варианта, только 1 вхождение в строку
Смежные вопросы