Команда Bash, выдающая разные результаты при вводе в терминал вместо копирования и вставки - PullRequest
1 голос
/ 21 апреля 2020

Впервые до linux, практикуя bash на виртуальной машине, работающей под Ubuntu через VirtualBox. У меня есть команда для печати первого символа каждой строки в текстовом файле, который выдает правильный вывод:

cut -f 1- -d "^M" sample.txt | cut -c 1

Однако, когда я копирую команду из терминала и вставляю обратно в терминал, используя Ctrl + Shift + c и Crtl + Shift + v, затем выполнить, это дает мне следующую ошибку:

cut: the delimiter must be a single character

Редактировать: я набираю "^ M", удерживая Ctrl + v и нажимая клавишу возврата каретки

Редактировать: В любом случае команда Cut не работает с каждой строкой, поэтому первая часть команды в приведенном примере бесполезна, даже если вопрос остается в силе.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Единственный известный мне случай в Linux, когда вы получаете ^M на экране, набирая ctrl v , а затем Enter , внутри текстового редактора. vim или gvim .

В этом случае текст, введенный в ваш файл, действительно является переводом каретки, но на экране вы видите два символа ^M. Поскольку вы видите , а не то, что вы получите, копирование и вставка приведет к непредсказуемым результатам.

В Linux строки не разделяются возвратом каретки (шестнадцатеричный код 0d или ctrl m ), но с помощью перевода строки (шестнадцатеричный код 0a или ctrl j ).

0 голосов
/ 21 апреля 2020

Вместо замены ^M в файле Windows с помощью скрипта bash вы можете попробовать использовать команду dos2unix, это именно то, что делает эта команда.

...