Jak mogę rozdzielić litery słowa, a każdą literę w osobnym wierszu?
Na przykład, biorąc pod uwagę "StackOver"
, że chciałbym zobaczyć
S
t
a
c
k
O
v
e
r
Jestem nowy w bash, więc nie mam pojęcia, od czego zacząć.
command-line
split
words
Sijaan Hallak
źródło
źródło
Here string
, grosso modo odpowiednik poecho foo | ...
prostu mniej pisania. Zobacz tldp.org/LDP/abs/html/x17837.html.
na\B
(nie pasuje do granicy słów).sed
jak:sed -et -e's/./\n&/g;//D'
Jeśli chcesz drukować tekst w pionie, możesz chcieć przełamać klastry grafemów zamiast znaków. Na przykład z
e
ostrym akcentem:W przypadku klastrów grafemowych (
e
z ostrym akcentem byłby jeden klaster grafemowy):(lub
grep -Po '\X'
z GNU grep zbudowanym z obsługą PCRE)Ze znakami (tutaj z GNU
grep
):fold
ma łamać znaki, ale GNUfold
nie obsługuje znaków wielobajtowych, więc zamiast tego łamie bajty:Na StackOver, który składa się tylko ze znaków ASCII (więc jeden bajt na znak, jeden znak na klaster grafemu), wszystkie trzy dają ten sam wynik.
źródło
grep -Po
że nie robi tego, czego można by się spodziewać (jakgrep -P
robi).grep -Po .
znajduje znaki (a łączący ostry akcent po znaku nowej linii jest nieprawidłowy) igrep -Po '\X'
znajduje dla mnie klastry grafhem. Może być potrzebna najnowsza wersja grep i / lub PCRE, aby działała poprawnie (lub spróbujgrep -Po '(*UTF8)\X'
)Jeśli masz perl6 w swoim pudełku:
pracować niezależnie od lokalizacji.
źródło
Z wieloma
awk
wersjamiźródło
awk -v FS='' -v OFS='\n' '{$1=$1};1'
(zastanawiając się, czy to jest bardziej mobilny, ponieważ-F ''
może uzyskując ERE://
)Poniżej będą ogólne:
źródło
źródło
Ponieważ konkretnie poprosiłeś o odpowiedź w bash, oto sposób na zrobienie tego w czystym bashu:
Pamiętaj, że spowoduje to złapanie nowego wiersza na końcu „ dokumentu tutaj ”. Jeśli chcesz tego uniknąć, ale nadal iterować znaki za pomocą pętli bash, użyj,
printf
aby uniknąć nowej linii.źródło
Również Python 2 może być używany z wiersza poleceń:
lub:
lub (jak skomentował 1_CR) w Pythonie 3 :
źródło
Możesz użyć
fold (1)
polecenia. Jest bardziej wydajny niżgrep
ised
.Jedną znaczącą różnicą jest to, że fold odtworzy puste linie na wyjściu:
źródło
Możesz obsługiwać znaki wielobajtowe, takie jak:
Co może być bardzo przydatne, gdy pracujesz z danymi wejściowymi na żywo, ponieważ nie ma tam buforowania, a postać jest drukowana, gdy tylko będzie cała .
źródło
sed
służą skrypty. raczej nie napiszę o tym teraz - jestem dość śpiący. jest to jednak bardzo przydatne podczas czytania terminala.dd
spowoduje to przerwanie znaków wielobajtowych, więc wynik nie będzie już tekstem, więc zachowanie sed będzie nieokreślone zgodnie z POSIX.Możesz także używać granic słów.
źródło
W bash:
Działa to z dowolnym tekstem i tylko z wewnętrznymi funkcjami bash (nie jest wywoływane zewnętrzne narzędzie), więc powinno być szybkie na bardzo krótkich ciągach.
Wynik:
Jeśli można zmienić IFS i parametry pozycyjne, można również uniknąć wywołania podpowłoki:
źródło
aktualizacje tutaj to hacky | najszybszy | pureBashBased sposób!
po więcej niesamowitości
źródło
fold -b1
?to podzieli twoje słowo i zapisze je w tablicy
var
.źródło
źródło