Jak wykonać sed w określonych częściach linii? I, przeciwnie, jak sprawić, aby sed nie działał na określonych częściach linii?Sposób działania tylko na części linii
Przykłady:
"A a A a (A a) A (a A) a"
Jak, na przykład, wymienić wszystkie A
S z T
s tylko pomiędzy (
i )
uzyskanie:
"A a A a (T a) A (a T) a"
A biorąc pod Następny przykład input:
"F f F f (F f) F (f F) f"
Jak na przykład wymienić wszystkie F
sz X
s, ale nie pomiędzy (
i )
do otrzymujemy:
„X f X f (K), X (K) f "
Przeszukałem Google, ale nie znalazłem niczego użytecznego. Sądzę, że to ogólne pytanie o sed. Problem jest sprowadzalny do ogólnych "szablonów" sed, mam nadzieję.
- mający OD i DO następnie działać tylko między nimi (na wszystkich wystąpień na danej linii)
- mających od a do działania w innym miejscu niż między nimi ...
- szczególny przypadek kiedy OD i DO są takie same (od „i” lub „foo” i „foo” itd.) zarówno 1. i 2.
powinien pracować z każdej operacji, a nie tylko podstawienia, ale także drukowanie itd., takie jak drukowanie wszystkiego między ciągami "FOO" i "BAR" w łańcuchu.
"1 2 3 BAR a b c FOO d e f BAR g a h FOO i j k BAR l m n FOO o p q"
Rezultatem będzie
" d e f i j k "
Więc, ogólne przykłady, w jaki sposób to zrobić byłoby bardzo mile widziane. Wydaje się również, że to pytanie jest dość powszechne, ale nie ma jeszcze dobrego poradnika na temat Google. Zgaduję również, że odpowiedź na to pytanie byłaby dość trudna. Proszę również nie dawać wskazówek jak to zrobić używając Perla, AWK czy cokolwiek innego niż sed. To pytanie jest naprawdę tylko sed-pytanie.
Starałem się jak mogłem. Mój pomysł polegał na podzieleniu linii na części przez FROM i TO (w jakiś sposób), a następnie "jakoś" (nie wiem jak jeszcze), aby działał albo na parzystych lub nieparzystych częściach albo na podobnej zasadzie. Gdybym wiedział, jak to zrobić, nie prosiłbym o to tutaj. I jest bardzo prawdopodobne, że mój pomysł podziału może być błędny. Jest to dość trudne i wcześniej używał sed tylko do prostych zadań. – mjf