Jak zamienić lewy nawias na sed?

27

Muszę zastąpić (jakąś postacią w moim pliku i nie mogę tego zrobić. \(służy do grupowania w sed, a kiedy używałem \\(sed, traktował to jako \(charakter, a nie tylko (. Wydaje mi się to trudną sprawą.

dwwdw
źródło
7
Sugestia: jeśli chcesz po prostu zastąpić znak na inny, stosowanie tr(anslate) echo 'Hello (world)' | tr '()' '[]'; wychodzi Hello [world].
Lekensteyn

Odpowiedzi:

45

Jeśli użyjesz sed bez -r (rozszerzone wyrażenia regularne), będzie działać tak, jak używa \(\)zamiast ()grupować:

sed -e 's/(/X/g'

Na przykład

$ echo "foo (bar) (baz)" | sed -e 's/(/X/g'
foo Xbar) Xbaz)

Jeśli chcesz użyć -r, możesz włożyć do (środka []np

sed -re 's/[(]/X/g'

Jak zauważa Lekensteyn, używanie trmoże być bardziej odpowiednie, ponieważ jedynie zastępujesz i nie potrzebujesz pełnej mocy wyrażeń regularnych.

NN
źródło
TL; DR: Nie uciekaj.
qwertzguy,
Użyłem tego, aby zastąpić przestarzałe „split” php funkcją „wybuch”, upewniając się, że „split” jest poprzedzony spacją, a po nim „(”.grep -lRZ " split(" . | xargs -0 sed -i -e 's/ split(/ explode(/g'
Buttle Butkus