2012-01-17 13 views
7

Czy można zastąpić coś w env var z SED?Jak używać SED bez pliku z env var?

$ a='aoeua' 
$ sed '[email protected]@[email protected]' <$a 
bash: aoeua: No such file or directory 
$ env|grep "SHELL" 
SHELL=/bin/bash 

Wyjście chcę jest

ooeuo 

zastępując każdą a w 'aoeua' z o.

+0

Mam edytować swoje pytanie wyjaśnić, co wyjście szukasz, na podstawie zaakceptowanej odpowiedzi. Pierwotne pytanie pokazało nam, co * nie * działało, ale nie wyjaśniło nam wyraźnie, co próbujesz zrobić. (Laurence odgadł poprawnie.) –

Odpowiedz

10

Korzystanie echo:

$ echo "$a" | sed '[email protected]@[email protected]' 

W bashu można także wykonywać proste podstawienia ze składnią ${parameter/pattern/string}. Na przykład:

$ v='aoeua' 
$ echo ${v/a/o} 
ooeua 

Należy zauważyć, że zastępuje to tylko pierwsze wystąpienie wzorca.

+3

Dla ** globalnej substytucji ** możemy zrobić 'echo $ {v // a/o}'. –

+0

@JaypalSingh Dzięki! Nie widzę żadnej wzmianki o tym na stronie man, ale wygląda na to, że działa. –

+1

Tak, to nie jest tak dobrze napisane. Oto, co mówi - '$ {parametr/wzorzec/ciąg} Wzorzec jest rozwijany w celu utworzenia wzorca, podobnie jak w rozszerzaniu nazw plików. Parametr jest rozwinięty i najdłuższe dopasowanie wzorca względem jego wartości zostaje zastąpione ciągiem. ** Jeśli wzór zaczyna się od /, wszystkie dopasowania wzoru są zastępowane łańcuchem **. Zwykle zastępowany jest tylko pierwszy mecz. " –

Powiązane problemy