САС изменить текст между матчами, не влияя на совпадения - PullRequest
0 голосов
/ 27 августа 2018

У меня есть текст

#MATCH1
command 1
command 2
command 3
#MATCH2

sed -i '/MATCH1/,/MATCH2/' s/^/#/' <filename>

ли

##MATCH1
#command 1
#command 2
#command 3
##MATCH2

И что я хочу, это

#MATCH1
#command 1
#command 2
#command 3
#MATCH2

У кого-нибудь есть идеи, как это сделать? Без постобработки вывод

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

sed для s / old / new, вот и все. Для всего остального вы должны использовать awk:

$ awk '/MATCH2/{f=0} f{$0="#" $0} /MATCH1/{f=1} 1' file
#MATCH1
#command 1
#command 2
#command 3
#MATCH2

Это будет работать с использованием любого awk в любой оболочке на любой машине UNIX и совершенно тривиально изменить, если / когда вы захотите сделать что-нибудь еще.

0 голосов
/ 27 августа 2018

Вы можете использовать это sed, чтобы убедиться, что у нас нет # в начале строки:

sed '/MATCH1/,/MATCH2/ s/^[^#]/#&/' file

#MATCH1
#command 1
#command 2
#command 3
#MATCH2

Обратите внимание, что это соответствует только непустым строкам между заданными ключевыми словами. В качестве альтернативы вы можете использовать это sed:

sed '/MATCH1/,/MATCH2/ { /^#/! s/^/#/; }' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...