Zadzwoń pod numer sed
, który napisze skrypt sed, a drugi go użyje? Jeśli twoje listy są w plikach listA
i listB
, a następnie:
paste -d : listA listB | sed 's/\([^:]*\):\([^:]*\)/s%\1%\2%/' > sed.script
sed -f sed.script files.to.be.mapped.*
Robię kilka przepiękne założenia o „słowach” nie zawierające ani okrężnicy lub symboli procent, ale można dostosować wokół tego. Niektóre wersje sed
mają górne ograniczenia liczby poleceń, które można określić; jeśli jest to problem, ponieważ twoje listy słów są wystarczająco duże, być może będziesz musiał podzielić wygenerowany skrypt sed na oddzielne pliki, które zostaną zastosowane - lub zmienić, aby użyć czegoś bez limitu (na przykład Perl).
Kolejnym przedmiotem, o którym należy pamiętać, jest kolejność zmian. Jeśli chcesz zamienić dwa słowa, musisz ułożyć starannie listy słów. Ogólnie rzecz biorąc, jeśli zamapujesz (1) słowoA na słowoB i (2) słowoB na słowoC, ważne jest czy skrypt sed odwzorowuje (1) przed lub po mapowaniu (2).
Pokazany skrypt nie zwraca uwagi na granice słów; możesz zrobić to ostrożnie na różne sposoby, w zależności od wersji sed
, której używasz, i twoich kryteriów, co stanowi słowo.
Fajnie, ogólnie rzecz biorąc, ale z potencjalnym problemem. To rozwiązanie niekoniecznie zachowuje odstęp między słowami na liniach, na których wprowadzane są zmiany; przebiegi białych spacji zostają zmienione na pojedyncze spacje. Ponieważ nie znamy charakteru tekstu, może to nie stanowić problemu i może nawet okazać się zaletą. W każdym razie +1 ode mnie. –
Jest to zdecydowanie bardziej wydajne niż rozwiązanie poniżej, które zapisuje skrypt sed. Ukończono w 3 minuty, co zajęło 3 dni, używając roztworu sed. Zastępuje również całe słowa, mimo że nie jest to pytanie. –
To rozwiązuje cel, ale jak zachować białe przestrzenie? Wygląda na to, że skrypt awk zastępuje je tylko jednym spacji. – Guru