2015-12-02 3 views
1

Если строка начинается с «#», она ищет замену первого вхождения «(« и последнего вхождения ») с пробелом как следующее:Заменить первое и последнее совпадение символов только в том случае, если строка начинается с определенного слова

Пример ввода: кот world.txt

MAP MT.POS(AUS) , SOUTH 
#TARGET(MT.POS(USA) , NORTH) 
MAP MT.POS(CAN) , NORTH 

Я пытаюсь сделать с помощью СЭД следующим

cat world.txt | sed -e '/^#/s/\(.*\))/\1 /; /^#/s/\(.*\)(/\1/' 

Ниже то, что я ожидал.

MAP MT.POS(AUS) , SOUTH 
#TARGET MT.POS(USA) , NORTH 
MAP MT.POS(CAN) , NORTH 

Заранее благодарен.

ответ

1

Вы можете использовать следующую команду: sed

sed '/^#/s/(\(.*\))/\1/' file 

/^#/ является адрес и соответствует линии, начиная с #. Этими линиями являются следующие s (заместитель). Он ищет первую и последнюю скобки в строке и заменяет их текстом между ними.

Отметьте, что .* соответствует жадным. Это означает, что он будет потреблять как можно больше символов (включая круглые скобки) до тех пор, пока в строке не будет найдена последняя закрывающая скобка.

+0

спасибо.! Я собираюсь сделать больше, как этот sed '/^#/s/(\(.*\))/\t\\\' – CodeDevotion

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