Я думаю, что Вы ищете команду 'типа'. Это скажет Вам, является ли что-то функцией, встроенной функцией, внешней командой, или просто не определенное. Пример:
$ 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
Для достаточно современных версий 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 '\\\\' "\\\\"
\\\\ \\
То есть оболочка применяет различные правила экранирования к строкам, заключенным в одинарные кавычки, по сравнению со строками в двойных кавычках. Обычно вы хотите защитить все обратные косые черты, общие в регулярных выражениях, с помощью одинарных кавычек.
Это должно сработать:
sed -e 's/[ \t]+/\n/g'
[\ t]
означает пробел ИЛИ табуляцию. Если вам нужно какое-либо пространство, вы также можете использовать \ s
.
[\ t] +
означает столько пробелов ИЛИ табуляции, сколько вы хотите (но хотя бы один)
s / x / y /
означает замену шаблона x на y (здесь \ n
- это новая строка)
g
в конце означает, что вы должны повторять столько раз, сколько встречается в каждой строке.
Переносимый способ сделать это так:
sed -e 's/[ \t][ \t]*/\
/g'
Это фактический перевод строки между обратной косой чертой и косой чертой-g. Многие реализации sed не знают о \ n
, поэтому вам нужен буквальный перевод строки. Обратная косая черта перед новой строкой не позволяет sed расстроиться из-за новой строки. (в сценариях sed команды обычно заканчиваются символом новой строки)
В GNU sed вы можете использовать \ n
в замене, а \ s в регулярном выражении:
sed -e 's/\s\s*/\n/g'
GNU sed также поддерживает "