Możesz używać jednowierszowych perl, podobnie jak w sedzie, z zaletą pełnego wsparcia wyrażeń regularnych w perlu (które jest znacznie potężniejsze niż to, co dostajesz z sed). Występuje również bardzo mała różnorodność między platformami * nix - perl to generalnie perl. Możesz więc przestać martwić się o to, jak sprawić, by wersja seda w Twoim systemie robiła to, co chcesz.
W takim przypadku możesz to zrobić
perl -pe 's/(regex)/\n$1/'
-pe
umieszcza perl w pętli "wykonaj i wydrukuj", podobnie jak normalny tryb działania seda.
'
cytuje wszystko inne, aby powłoka nie przeszkadzała
()
otoczenie wyrażenia regularnego jest operatorem grupowania. $1
po prawej stronie zamiany wypisuje wszystko, co zostało dopasowane w tych pasmach.
Wreszcie \n
jest nowa linia.
Niezależnie od tego, czy używasz nawiasów jako operatora grupującego, musisz uciec przed wszystkimi nawiasami, które próbujesz dopasować. Zatem wyrażenie regularne pasujące do wzorca wymienionego powyżej byłoby czymś w rodzaju
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
lub \)
dopasowuje dosłowny paren i \d
dopasowuje cyfrę.
Lepszy:
\(\d{3}\)\d{3}-\d{4}
Wyobrażam sobie, że możesz dowiedzieć się, co robią liczby w nawiasach klamrowych.
Dodatkowo możesz użyć separatorów innych niż / dla swojego wyrażenia regularnego. Więc jeśli chcesz dopasować / nie musisz od tego uciekać. Każde z poniższych jest odpowiednikiem wyrażenia regularnego na początku mojej odpowiedzi. Teoretycznie można zastąpić standard (y) dowolnym znakiem .
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Kilka myśli końcowych.
używanie -ne
zamiast -pe
działa podobnie, ale nie drukuje automatycznie na końcu. Może być przydatne, jeśli chcesz drukować samodzielnie. Na przykład, oto grep-alike ( m/foobar/
to dopasowanie wyrażenia regularnego):
perl -ne 'if (m/foobar/) {print}'
Jeśli uważasz, że radzenie sobie z nowymi liniami jest kłopotliwe i chcesz, aby było to dla Ciebie magiczne, dodaj -l
. Nie jest to przydatne dla OP, który pracował z nowymi liniami.
Dodatkowa wskazówka - jeśli masz zainstalowany pakiet pcre, jest on dołączony do zestawu pcregrep
, który używa wyrażeń regularnych zgodnych z Perlem.
sed '/regex/G'