
Então eu tenho a seguinte declaração que fiz:
echo "1234 The few, 7777 the brave." | sed 's/[0-9]\{4\}/(&)/g'
quais saídas
(1234) The few, (7777) the brave.
no entanto, quero excluir o 7777 da correspondência de padrões.
(1234) The few, 7777 the brave.
pergunta: como excluo a correspondência do padrão 7777?
Responder1
sed não possui expressões antecipadas que permitiriam pular 7777. Mas você poderia fazer isso de maneira desajeitada, movendo todas as correspondências de 7777 "fora do caminho" para alguma string que você tem certeza de que não ocorre em nenhum lugar de sua entrada.
Por exemplo, se você sabe que #7#7#7#7# não ocorre na entrada, você pode usar:
echo "1234 The few, 7777 the brave." | \
sed -e 's/7777/#7#7#7#7#/g' -e 's/[0-9]\{4\}/(&)/g' -e 's/#7#7#7#7#/7777/g'
obter
(1234) The few, 7777 the brave.
Responder2
Alternativamente:
echo "1234 The few, 7777 the brave." | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
(1234) The few, 7777 the brave.
echo "A 1717 B 7777 C 7676 D" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
A (1717) B 7777 C (7676) D
echo "7777 foo 1234 bar" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
7777 foo (1234) bar