Czy można to zrobić ładniej (powtórz symbol zastępczy dla innego polecenia)
echo $(for x in *;do echo $x|sed 's/\([ \t\n\r\v\f\;#]\)/\^\1/g'|sed 's/$/\;/g';done)
Ponadto nie powinno być; po ostatniej nazwie pliku.
przykładowe użycie polecenia „doit” to
doit files[ list-of-files ] 'flags[foo;bar;other^ flag]options[value^ 1[1]value^ array[1;2;3]]'
itp.
Możliwe jest wewnętrzne opuszczanie białych znaków (w doit), ponieważ nie wpływa to na tokenizer doits (po prostu zjada każdą białą spację, która nie następuje ^). Oprócz dobrej rozszerzalności składni kod do odczytu plików konfiguracyjnych i wiersz poleceń są takie same.
Sed działa, oczekując, że doda; za dużo na końcu. Jednak logika dodawania; wewnątrz doit nie jest trudne do wdrożenia, więc ten ostatni krok nie jest konieczny. Nie podoba mi się to, że potrzebuję pętli, aby uciec przed każdym argumentem osobno. Po prostu echo * | sed ... nie zrobiłby tego, ponieważ echo niszczy informacje (wypisuje wszystko ograniczone przez białe znaki).
Podobny problem: chcę dodać echo ~ / my_progs / * dwukropek oddzielony do zmiennej ścieżki.
źródło
doit
wymagany przez tę magię . A może twoje polecenie działa już idealnie i szukasz czegoś „ładniejszego”, ponieważ…?doit
aby odpowiedzieć.;
prostu usunąć ostatniąsed
komendę:sed 's/$/\;/g'
. Wyraźnie mówisz, aby dodać;
na końcu. Prawdopodobnie istnieje na to lepszy sposób, ale nie możemy go znaleźć, chyba że podasz nam konkretne przykłady. Zależy od Ciebie.Odpowiedzi:
Nie jest jasne, co próbujesz zrobić, ale na podstawie „listy zmian plików”. Myślę, że to jest rozwiązanie:
Ustawienie zmiennej środowiskowej IFS (Internal File Separator) na to spowoduje prawidłowe rozdzielenie plików na podstawie podziałów linii.
Lub ewentualnie użyj,
find
jeśli nie chcesz używać pętli.źródło
Chciałem to zrobić bezpośrednio w powłoce, ale kompilacja programu w C działa lepiej. Z perspektywy powłoki jest to „komputer kwantowy”: jeden op, który działa znacznie szybciej niż powyższy skrypt powłoki. Wydaje mi się, że potrzeba więcej czasu, aby spawn sed dla każdego pliku.
źródło