Замените весь пробел разрывом строки / метка абзаца для создания списка слов

Я думаю, что Вы ищете команду 'типа'. Это скажет Вам, является ли что-то функцией, встроенной функцией, внешней командой, или просто не определенное. Пример:

$ LC_ALL=C type foo
bash: type: foo: not found

$ LC_ALL=C type ls
ls is aliased to `ls --color=auto'

$ which type

$ LC_ALL=C type type
type is a shell builtin

$ LC_ALL=C type -t rvm
function

$ if [ -n "$(LC_ALL=C type -t rvm)" ] && [ "$(LC_ALL=C type -t rvm)" = function ]; then echo rvm is a function; else echo rvm is NOT a function; fi
rvm is a function
62
задан Greg Bacon 17 June 2013 в 03:09
поделиться

4 ответа

Для достаточно современных версий sed отредактируйте стандартный ввод, чтобы получить стандартный вывод с помощью

$ echo 'τέχνη βιβλίο γη κήπος' | sed -E -e 's/[[:blank:]]+/\n/g'
τέχνη
βιβλίο
γη
κήπος

Если ваши словарные слова находятся в файлах с именами lesson1 и lesson2 , перенаправить стандартный вывод sed в файл all-vocab с помощью

sed -E -e 's/[[:blank:]]+/\n/g' lesson1 lesson2 > all-vocab

Что это означает:

  • Класс символов [[: blank:]] соответствует либо одиночному пробелу, либо один символ табуляции.
    • Используйте [[: space:]] вместо любого отдельного символа пробела (обычно пробел, табуляция, новая строка, возврат каретки, перевод страницы и вертикальная табуляция).
    • ] + квантификатор означает, что соответствует одному или нескольким из предыдущих шаблонов .
    • Итак, [[: blank:]] + - это последовательность из одного или нескольких символов, которые все пробелы или табуляция.
  • \ n в замене - это новая строка, которую вы хотите.
  • Модификатор / g в конце означает выполнение замены столько раз по возможности, а не один раз.
  • Параметр -E указывает sed использовать расширенный синтаксис регулярных выражений POSIX и, в частности, в этом случае квантор + . Без -E ваша команда sed станет sed -e 's / [[: blank:]] \ + / \ n / g' .
    • \ и конец первой строки команды - это маркер продолжения, который экранирует следующий за ним символ новой строки, а остаток команды находится на следующей строке.
      • Примечание: Не должно быть пробелов перед экранированной новой строкой. То есть конец первой строки должен быть точно обратной косой чертой, за которой следует конец строки.
    • Этот процесс, подверженный ошибкам, помогает понять, почему мир переместился на видимые символы, и вы захотите проявите некоторую осторожность при опробовании команды с помощью копирования и вставки.

Примечание относительно обратных косых черт и цитирования

В приведенных выше командах использовались одинарные кавычки ( '' ), а не двойные кавычки ( ] "" ). Примите во внимание:

$ echo '\\\\' "\\\\"
\\\\ \\

То есть оболочка применяет различные правила экранирования к строкам, заключенным в одинарные кавычки, по сравнению со строками в двойных кавычках. Обычно вы хотите защитить все обратные косые черты, общие в регулярных выражениях, с помощью одинарных кавычек.

93
ответ дан 24 November 2019 в 16:35
поделиться

Использование gawk :

gawk '{$1=$1}1' OFS="\n" file
0
ответ дан 24 November 2019 в 16:35
поделиться

Это должно сработать:

sed -e 's/[ \t]+/\n/g'

[\ t] означает пробел ИЛИ табуляцию. Если вам нужно какое-либо пространство, вы также можете использовать \ s .

[\ t] + означает столько пробелов ИЛИ табуляции, сколько вы хотите (но хотя бы один)

s / x / y / означает замену шаблона x на y (здесь \ n - это новая строка)

g в конце означает, что вы должны повторять столько раз, сколько встречается в каждой строке.

4
ответ дан 24 November 2019 в 16:35
поделиться

Переносимый способ сделать это так:

sed -e 's/[ \t][ \t]*/\
/g'

Это фактический перевод строки между обратной косой чертой и косой чертой-g. Многие реализации sed не знают о \ n , поэтому вам нужен буквальный перевод строки. Обратная косая черта перед новой строкой не позволяет sed расстроиться из-за новой строки. (в сценариях sed команды обычно заканчиваются символом новой строки)

В GNU sed вы можете использовать \ n в замене, а \ s в регулярном выражении:

sed -e 's/\s\s*/\n/g'

GNU sed также поддерживает "

56
ответ дан 24 November 2019 в 16:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: