Являются ли пробелы, пробелы и табуляции частью строки?

Вы можете выполнить grep один раз и дважды разделить, используя замену строки оболочки:

NAME=$(grep "$customer_id" customer-info | cut -f5,6 -d,)
FIRST_NAME=${NAME%,*}
LAST_NAME=${NAME#*,}

Или, с bash, используя подстановку процесса:

IFS=, read FIRST_NAME LAST_NAME < <(grep "$customer_id" customer-info | cut -f5,6 -d,)

readразделит ввод на IFSи назначит первое значение на FIRST_NAME, а остальные на LAST_NAME. Использование подстановки и перенаправления процесса < <(...)позволяет передать вывод grep... | cut...в readбез использования подоболочки.

5
20.12.2019, 15:08
4 ответа

https://en.wikipedia.org/wiki/Whitespace_character

In computer programming, whitespace is any character or series of characters that represent horizontal or vertical space in typography

Думаю, вы имеете в виду использование командной строки:

In commands processed by command processors, e.g., in scripts and typed in, the space character can cause problems as it has two possible functions: as part of a command or parameter, or as a parameter or name separator. Ambiguity can be prevented either by prohibiting embedded spaces, or by enclosing a name with embedded spaces between quote characters.

Пробел как разделитель параметров:

command arg1 arg2

Пробел как часть строки (одиночный параметр для команды):

command "arg with spaces"
1
27.01.2020, 20:31

В этом контексте нет такого понятия, как «пустой». Все, что у вас есть, это символы и некоторые символы, которые на самом деле не печатают ничего видимого для вас в обычном тексте. Впрочем, все выражается в характерах, да. В ASCII довольно много непечатаемых символов -, вы можете найти полный список здесь:https://web.itu.edu.tr/sgunduz/courses/mikroisl/ascii.html. Те, с которыми вы, скорее всего, столкнетесь в текстовых файлах, — это различные пробельные символы,:

  • Пробел:
  • Вкладка:\t
  • Новая строка:\n
  • Возврат каретки:\r

И реже:

  • Звонок:\a
  • Возврат:\b
  • Вертикальная вкладка:\v
  • Подача страницы:\f

У вас также есть NULL (\0), который не печатается -, но не отображается в текстовых файлах, а также специальные escape-символы(\eили^[)и Control -Z (^Z). но, опять же, не совсем в текстовых файлах.

Соответствующие ссылки


Таким образом, "пробел" может быть пробелом, табуляцией или другим пробельным символом. Или, если вы работаете с Unicode, а не с ASCII, у вас есть и другие странности. Но независимо от того, что у вас есть, они будут персонажами. Когда вы видите пробелы в тексте, компьютер видит какой-то символ. «Пробел» никогда не означает отсутствие символа, это всегда наличие непечатаемого -символа.

16
27.01.2020, 20:31

Поскольку ваш тег указывает на «Регулярное выражение», я предполагаю, что вы имеете в виду классы символов POSIX [:blank:]и [:space:].

Эта обзорная таблица показывает, что [:blank:]является подмножеством[:space:]:

  • [:space:]содержит все, что обычно обозначается как «пробелы», т.е. «пробел» (символ \x20, генерируемый при нажатии клавиши «пробел» ), горизонтальная табуляция, вертикальная табуляция, перевод страницы и т.д.
  • [:blank:]содержит только те символы, которые создают «пустой пробел» в пределах одной строки , то есть «пробел» и горизонтальную табуляцию \t.(*)

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

ОбновлениеЗдесь аналогичное обсуждение.

(*)Обратите внимание, :, как указал Stéphane Chazelaz, существуют реализации на основе BSD -, где [:blank:]также может содержать вертикальную табуляцию и перевод страницы.

17
27.01.2020, 20:31

ДА, если вы подчеркнете пробел, то это будет NULL, в противном случае пробел и пробел будут одинаковыми. Более того, пробел, пробел и табуляция - это символы, определенные системой ASCII или Unicode. пробел[0x00], пробел[0x20], вкладка[0x09]

1
27.01.2020, 20:31

Теги

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