Какую команду я могу использовать для разделения ввода следующим образом:
foo:bar:baz:quux
в это?
foo
bar
baz
quux
Я пытаюсь выяснить cut
команду, но, кажется, она работает только с фиксированным количеством ввода, например, «первые 1000 символов» или «первые 7 полей». Мне нужно работать с произвольно длинным вводом.
shell
text-processing
japreiss
источник
источник
tr : '\n' < input
?Ответы:
Есть несколько вариантов:
tr : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
Вы также можете сделать это в чистом виде
bash
:источник
\n
в строке замены, подобной этой, будет работать в GNU sed, но не будет работать в большинстве других реализаций sed.источник
Если ваш grep поддерживает,
-o
вы можете сделать это так:Или с помощью awk, установив разделитель записей на
:
:Или с вырезанным GNU:
редактировать
Как отметил Крис ниже, это оставит завершающий символ новой строки, этого можно избежать, если ваш awk поддерживает указание
RS
в качестве регулярного выражения (протестировано с GNU awk):источник
awk
пример оставит (вероятно, нежелательный) завершающий символ новой строки.В некоторых строках у меня была проблема с решениями выше. Но это сработало для меня:
источник