Ошибка Bash - вырезано: разделитель должен состоять из одного символа (при попытке использовать "/")

Я пытаюсь использовать косую черту в качестве разделителя, но я получаю сообщение об ошибке:

вырезать: разделитель должен состоять из одного символа

Это моя команда:

cat index.html |grep “href=“ |cut -d”/“ -f3 |more

1 ответ

Решение

Я подозреваю, что вы вставляете туда двойные кавычки с высоким ascii (причудливый юникод).

Для сравнения:

$ echo cut -d”/“ | hexdump -C
00000000  63 75 74 20 2d 64 e2 80  9d 2f e2 80 9c 0a        |cut -d.../....|
0000000e

$ echo cut -d"/" | hexdump -C
00000000  63 75 74 20 2d 64 2f 0a                           |cut -d/.|
00000008

2f это (прямая) косая черта, что все, что вы хотите cut чтобы увидеть его -d аргумент. Обратите внимание, что во втором выражении bash вообще не отправляет фактические двойные кавычки в команду, что является вашей целью.

e2 80 9d 2f e2 80 9c является e2 80 9d + 2f + e2 80 9c, e2 80 9d (11100010 10000000 10011101 в двоичном коде) является UTF-8 для U+201d а также e2 80 9c это UTF-8 для U+201c, которые являются правой двойной кавычкой и левой двойной кавычкой, соответственно. Интересно, что ваша паста привела к тому, что они "наизнанку" - то есть //x\\, а не \\x//.

Низкая двойная кавычка ascii, которую использует bash 22 (шестнадцатеричное или 34 в десятичном), что на языке Юникод U+0022 ( кавычка).

Я настоятельно рекомендую прочесть раздел "QUOTING" на странице руководства Bash (man bash и поиск для цитирования (введите /QUOTING + Enter), затем используйте клавиши со стрелками вверх и вниз и q выйти)

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