Mam duże pliki tekstowe z ciągami rozdzielanymi spacjami (2-5). Ciągi mogą zawierać „” lub „-”. Chciałbym zastąpić powiedzmy drugie miejsce rurą.
Jaka jest najlepsza droga?
Korzystając z sed, myślałem o tym:
sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt
Jakieś inne / lepsze / prostsze pomysły?
linux
command-line
sed
awk
dnkb
źródło
źródło
sed
pliku informacyjnego: „Uwaga: standard POSIX nie określa, co powinno się stać, kiedyg' and NUMBER modifiers, and currently there is no widely agreed upon meaning across
miksujesz implementacje sed”. W przypadku GNU „sed” interakcja jest zdefiniowana jako: zignoruj dopasowania przed NUMBER, a następnie dopasuj i zamień wszystkie dopasowania od NUMBER dnia ”.sed
. Nie jestem pewien, czy powinienem ci podziękować za uczynienie mniesed
jeszcze bardziej użytecznym, ale i tak to zrobię. ;)Próbowałeś swojej wersji? Zadziałało? Ponieważ uważam, że jest to w zasadzie dobry pomysł. Zrobiłbym jednak nieco inaczej:
Spowoduje to zaakceptowanie dowolnych znaków w słowie, które nie jest spacją, i zaakceptuje więcej niż jedną spację między dwoma pierwszymi słowami.
źródło