#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/'