Tak. Możesz to zrobić w / trw ustawieniach ASCII (co w przypadku GNU jest trswego rodzaju jedyną funkcją) . Możesz użyć klas POSIX lub możesz odwoływać się do wartości bajtów każdego znaku według liczby ósemkowej. Możesz także podzielić ich transformacje na zakresy.
LC_ALL=C tr '[:upper:]\0-\101\133-140\173-\377' '[:lower:][\n*]' <input
Powyższe polecenie przekształciłoby wszystkie wielkie litery na małe, całkowicie zignorowało wielkie litery i przekształciło wszystkie inne znaki na nowe znaki. Oczywiście wtedy kończysz z mnóstwem pustych linii. Do tr -spowtórzenia queeze przełączania mogą być przydatne w tej sprawie, ale jeśli używasz go u boku [:upper:]do [:lower:]transformacji wtedy można skończyć ściskając duże litery, jak również. W ten sposób nadal wymaga drugiego filtra, takiego jak ...
LC... tr ... | tr -s \\n
...lub...
LC... tr ... | grep .
... a więc jest o wiele mniej wygodne niż robienie ...
LC_ALL=C tr -sc '[:alpha:]' \\n <input | tr '[:upper:]' '[:lower:]'
... który ściska -cdopełnienie znaków alfabetycznych sekwencją w jeden nowy wiersz, a następnie przekształca górne na dolne po drugiej stronie rury.
Nie oznacza to, że zakresy tego rodzaju nie są przydatne. Rzeczy jak:
tr '\0-\377' '[1*25][2*25][3*25][4*25][5*25][6*25][7*25][8*25][9*25][0*]' </dev/random
... może być bardzo przydatny, ponieważ konwertuje bajty wejściowe na wszystkie cyfry w rozproszonym spektrum ich wartości. Nie marnuj, nie chcesz, wiesz.
Może to obejmować inny sposób przeprowadzenia transformacji dd.
tr '\0-\377' '[A*64][B*64][C*64][D*64]' </dev/urandom |
dd bs=32 cbs=8 conv=unblock,lcase count=1
dadbbdbd
ddaaddab
ddbadbaa
bdbdcadd
Ponieważ ddmoże to zrobić zarówno unblocki lcasekonwersji w tym samym czasie, może to być nawet możliwe, aby przejść dużo pracy poza nim. Ale to może być naprawdę użyteczne tylko wtedy, gdy możesz dokładnie przewidzieć liczbę bajtów na słowo - lub przynajmniej można wcześniej wstawić każde słowo spacjami do przewidywalnej liczby bajtów, ponieważ unblockje końcowe spacje na końcu każdego bloku.