удаление текста до и после ()

#sed #awk #grep

#sed #awk #grep

Вопрос:

Как мне удалить текст до первого (и после)?

 INSERT INTO `todel` VALUES (1,'akbar's','Mumbai, Delhi road, India');
INSERT INTO `todel` VALUES (2,'amar"s','South Africa, ghana');
  

Ожидаемый результат выглядит следующим образом…

 1,'akbar's','Mumbai, Delhi road, India'
2,'amar"s','South Africa, ghana'
  

Ответ №1:

Ruby (1.9 )

 $> ruby -ne 'print $_.sub(/.*(|).*$/,"")' file
1,'akbar's','Mumbai, Delhi road, India'
2,'amar"s','South Africa, ghana'
  

или оболочка (bash)

 $> while read -r line; do line=${line#*(}; echo ${line%)*}; done <file
1,'akbar's','Mumbai, Delhi road, India'
2,'amar"s','South Africa, ghana'
  

или awk

 $> awk '{sub(/.*(/,"");sub(/).*/,"")}1' file
1,'akbar's','Mumbai, Delhi road, India'
2,'amar"s','South Africa, ghana'
  

или sed

 $> sed -rn 's/.*(//;s/).*//p' file
1,'akbar's','Mumbai, Delhi road, India'
2,'amar"s','South Africa, ghana'
  

Ответ №2:

awk может использовать регулярное выражение в качестве разделителя полей, поэтому используйте любую скобку в качестве разделителя полей и просто выделите 2-е поле:

 awk -F'[()]' '{print $2}' filename
  

Ответ №3:

Вы можете удалить все от начала строки до первой ( и от (включая) последней ) до конца строки с помощью sed :

 sed -r 's/^[^(]*(.*))[^)]*$/1/'