2016-03-23 30 views
0

Ich habe eine Zeichenfolge, die mit Klammern, die ein einzelnes Zeichen, wie solches einschließen:sed - Klammern durch Zeichen ersetzen?

[a] 

ich das Zeichen innerhalb der Klammer und ersetzen Sie die Halterung mit dem Charakter, so dass das Endergebnis aussehen würde nehmen wollen:

aaa 

Dies ist, was ich mit aufkam, aber es funktioniert nicht:

sed 's/\[ \([a-z]\) \]/\2/g' < testfile 

Kann mir bitte jemand helfen und erklären Warum funktioniert mein Befehl nicht?

+1

Was für die Räume in dem Muster sind? Welches Capture (aus dem Muster) soll '\ 2' sein? Sie ersetzen fünf Zeichen durch ein Zeichen. Ist es das, was du meintest? –

+0

Löschen Sie die Leerzeichen und verdreifachen Sie das '\ 1', zB:' sed 's \ \ [\ ([az] \) \]/\ 1 \ 1 \ 1/g'' –

+2

'sed -e' s/\ [\ (. \) \]/\ 1 \ 1 \ 1/g'' – DigitalRoss

Antwort

0

Ich denke, Sie haben einige grundlegende Konzepte verpasst. Lassen Sie uns zunächst ein einzelnes Zeichen duplizieren

$ echo a | sed -r 's/(.)/\1\1/' 
aa 

Klammern die Gruppen angibt und \1 bezieht sich auf die erste Gruppe

nun ein Zeichen in eckigen Klammern entsprechen und verdreifachen.

Sie müssen eckige Klammer Zeichen entkommen, da sie eine besondere Bedeutung in Regex haben. Der Schlüssel ist, dass Sie die Regex, die Sie interessiert, in Klammern einschließen und in derselben Reihenfolge mit der Notation \{number} darauf verweisen müssen.

0

Das Problem mit Ihren Patern sed 's/\[ \([a-z]\) \]/\2/g' < testfile:

1) The pattern has only one group \([a-z]\), so \2 is invalid; 
2) The pattern contains space, there is no match found; 
3) To replace brackets, you need to capture them in a group. 

Meine Idee ist, alle Gruppen in einem Muster zu fangen, und ersetzen sie durch \2\2\2:

echo "[a]" | sed 's/\(\[\)\([a-z]\)\(\]\)/\2\2\2/g' 

Oder

echo "[a]" | sed 's/\(.\)\(.\)\(.\)/\2\2\2/g' 

Der Ausgang ist:

aaa 
0

Versuchen Sie, den folgenden Code:

$ echo "[a]" | sed 's/\[\([a-zA-Z]\)\]/\1\1\1/g' 

oder

$ echo "[a]" | sed -r 's/\[([a-zA-Z])\]/\1\1\1/g' 

Ausgang:

aaa 
Verwandte Themen