Jakiego polecenia mogę użyć do podzielenia danych wejściowych w ten sposób:
foo:bar:baz:quux
zaangażowany w to?
foo
bar
baz
quux
Próbuję rozgryźć cut
polecenie, ale wydaje się, że działa ono tylko ze stałą ilością danych wejściowych, takich jak „pierwsze 1000 znaków” lub „pierwsze 7 pól”. Muszę pracować z dowolnie długim wkładem.
shell
text-processing
japreiss
źródło
źródło
tr : '\n' < input
?Odpowiedzi:
Istnieje kilka opcji:
tr : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
Możesz to również zrobić w czystej postaci
bash
:źródło
\n
takiego zastępującego ciągu będzie działać w GNU sed, ale zawiedzie w większości innych implementacji sed.źródło
Jeśli twój grep obsługuje
-o
, możesz to zrobić w następujący sposób:Lub za pomocą awk, ustawiając separator rekordów na
:
:Lub z cięciem GNU:
Edytować
Jak zauważył Chris poniżej, pozostawi to końcowy znak nowej linii, można tego uniknąć, jeśli awk obsługuje określanie
RS
jako wyrażenie regularne (testowane z GNU awk):źródło
awk
przykład pozostawi (prawdopodobnie niepożądany) końcowy znak nowej linii.W niektórych ciągach miałem problem z powyższymi rozwiązaniami. Ale to zadziałało dla mnie:
źródło