Как заменить дефис словом

У меня есть следующий текст:

Since the 1-93 fragment contains additional residues 84–93. 

Первый hypen, найденный в «1-93», хорош, когда я обрабатываю текст, но второй, не уверен, что это hypen или другой символ, который вызвал мои проблемы, поэтому мне нужно заменить это «-» в тексте, чтобы на конец:

Вместо 84-93. Пожалуйста, как это сделать.

  • замените шаблон внутри строки с рисунка в начале
  • скопировать и заменить столбец с помощью unix
  • Одна колонка на две
  • Удалите дополнительные строки заголовков из файла, кроме первой строки
  • Как удалить символ новой строки между двумя строками <font> \ n </ font> в unix?
  • Поиск последнего символа файла и добавление строки после этого?
  • Как распечатать все строки, не содержащие строку вместе со смежными строками?
  • Как объединить строки с фиксированным интервалом в файле?
  • 2 Solutions collect form web for “Как заменить дефис словом”

    Вы всегда можете использовать такой инструмент, как восьмеричный дамп ( od ) или hexdump чтобы подтвердить код ASCII для данного символа.

    пример

     $ echo 'Since the 1-93 fragment contains additional residues 84–93.' | hexdump -C 00000000 53 69 6e 63 65 20 74 68 65 20 31 2d 39 33 20 66 |Since the 1-93 f| 00000010 72 61 67 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 |ragment contains| 00000020 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 69 | additional.resi| 00000030 64 75 65 73 20 38 34 e2 80 93 39 33 2e 0a |dues 84...93..| 0000003e 

    Итак, первый - это ASCII-код 2d , а второй вовсе не ASCII-код. Таким образом, тире явно отличаются. Это на самом деле символ UTF-8 0xe28093 , EN-DASH. (Спасибо @casey за это разъяснение!)

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

    СЕПГ

     $ var='Since the 1-93 fragment contains additional\nresidues 84–93.' $ echo -e $var | sed 's/–/-/g' Since the 1-93 fragment contains additional residues 84-93. 

    удар

     $ var='Since the 1-93 fragment contains additional\nresidues 84–93.' $ echo -e ${var/–/-} Since the 1-93 fragment contains additional residues 84-93. 

    Вы можете использовать sed :

     $ echo "Since the 1-93 fragment contains additional > residues 84–93." | sed 's/–/ to /g' Since the 1-93 fragment contains additional residues 84 to 93. 

    Чтобы редактировать несколько файлов на месте, мы используем GNU sed , вы можете:

     sed -i 's/–/ to /g' ./*.txt 
    Linux и Unix - лучшая ОС в мире.