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

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

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

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

  • Заверните линии до указанного количества полей
  • Как распечатать все, кроме Nth, до последней строки в sed?
  • Установить теорию с помощью инструментов unix: «расслабленное» пересечение двух списков, где элемент в наборе 1 является по меньшей мере подстрокой элементов в наборе 2
  • Печать нескольких шаблонов поиска в одной строке + обработка текста
  • Как я могу обернуть текст при определенном размере столбца?
  • Преобразование строк в столбцы файла
  • Вместо 84-93. Пожалуйста, как это сделать.

  • Заменить строку, содержащую новую строку в огромном файле
  • Разбор большого текстового файла, а затем запись в отдельные файлы вывод каждого
  • Как вставить строку между двумя последовательными,?
  • как удалить многострочную строку / блок текстового шаблона из файла?
  • транспонировать наборы из трех строк в столбцы
  • Заменить второе и последнее вхождение строки в каждой строке
  • 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 - лучшая ОС в мире.