Как ввести символ табуляции в командной строке?

В интерактивном терминале bash как мне ввести символ табуляции? Например, если бы я хотел использовать sed для замены "_" на вкладки, я бы хотел использовать:

echo $string | sed 's/[_]/TAB/g'

Где TAB означает клавишу табуляции. Это работает в сценарии оболочки, а не в интерактивном режиме, где, когда я нажимаю клавишу табуляции, я не получаю никаких символов и слышен глухой звук. Я также пытался \t но это только помещает т в строку, а не вкладки.

Обратите внимание, что это Mac OSX.

1 ответ

Решение

Предшествуйте этому с помощью Control + V, затем Tab, чтобы подавить обычное поведение расширения.

Поскольку этот вопрос помечен как "bash"... использование функции "цитирования ANSI-C" оболочки Bash, вероятно, предпочтительнее. Он расширяет escape-последовательности ANSI C-стиля, такие как \t а также \n и возвращает результат в виде строки в одинарных кавычках.

echo $string | sed $'s/_/\t/g'

Это не означает, что ваш терминал понимает привязку клавиш Control+V (буквально вставлять следующий символ) - некоторые могут этого не делать. Кроме того, поскольку все "невидимые" символы могут быть представлены буквально, ваше решение может быть скопировано без потери информации, и будет гораздо более очевидным / долговечным, если вы используете, включая это sed вызов в сценарии, который другие люди могут в конечном итоге прочитать.

Также обратите внимание, что версия MacOS sed это версия BSD. GNU sed будет интерпретировать побег персонажа как \t в шаблоне замены просто отлично, и вам даже не понадобится выше обходного пути.

Вы можете установить GNU sed с MacPorts, и он должен быть доступен как gsed, но Homebrew может заменить вашу систему sed в зависимости от того, как у вас есть $PATH переменная аранжировка.

Другие вопросы по тегам