
Ich habe daher folgende Aussage gemacht:
echo "1234 The few, 7777 the brave." | sed 's/[0-9]\{4\}/(&)/g'
welche Ausgänge
(1234) The few, (7777) the brave.
Ich möchte jedoch die 7777 vom Mustervergleich ausschließen.
(1234) The few, 7777 the brave.
Frage: Wie schließe ich die Musterübereinstimmung 7777 aus?
Antwort1
sed hat keine Vorausschauausdrücke, mit denen Sie 7777 einfach überspringen könnten. Sie könnten es aber umständlich tun, indem Sie alle 7777 Übereinstimmungen „aus dem Weg“ in eine Zeichenfolge verschieben, von der Sie sicher sind, dass sie in Ihrer Eingabe nirgends vorkommt.
Wenn Sie beispielsweise wissen, dass #7#7#7#7# in der Eingabe nicht vorkommt, können Sie Folgendes verwenden:
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'
zu bekommen
(1234) The few, 7777 the brave.
Antwort2
Alternative:
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