Удаление всех специальных символов из строки в Bash
У меня есть много текста в нижнем регистре, только проблема в том, что есть много специальных символов, которые я хочу удалить все с номерами.
следующая команда недостаточно сильна:
tr -cd '[alpha]n '
в случае éćščž и некоторых других он возвращается "?- Но я хочу удалить их все. Есть ли более сильная команда?
Я использую linux mint 4.3.8 (1)-release
3 ответов
можно использовать tr для печати только печатаемых символов из строки, как показано ниже. Просто используйте команду ниже в своем входном файле.
tr -cd "[:print:]\n" < file1
флаг -d предназначен для удаления наборов символов, определенных в аргументах входного потока, и -c для дополнения тех (инвертировать то, что предусмотрено). Так без -c команда удалит все печатаемые символы из входного потока и с его помощью дополнит его, удалив непечатаемые символы. Мы также сохраняем символ новой строки \n сохранить окончаний строк во входном файле. Удаление его просто произведет конечный результат в одной большой линии.
на [:print:] это просто выражение скобки POSIX что является комбинацией выражений [:alnum:], [:punct:] и пространство. The [:alnum:] это то же самое, что [0-9A-Za-z] и [:punct:] включает в себя символы ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
Я не совсем уверен, откуда идет текст в вашем вопросе, но давайте просто скажем, что" много текста в нижнем регистре " находится в файле с именем special.txt вы можете сделать что-то вроде следующего, но больше сосредоточены на символах, которые вы хотите сохранить:
cat special.txt | sed 's/[^a-z A-Z]//g'
это немного похоже на операцию с топором.
еще одно возможное решение в сообщении удалить символы, отличные от ascii ...
Если вышеуказанное не разрешает ваше вопрос, пожалуйста, попробуйте предоставить немного больше деталей, и я мог бы предоставить более действенный ответ.
просто хотел добавить свой бит к нему. Приведенный ниже код сделает лучшую работу по избавлению от всех символов, как описано выше, и заменит их пробелом и сохранит ваш символ новой строки одновременно
tr -s "[:punct:]" " "
от ручного ввода-s
сожмите несколько вхождений символов, перечисленных в последнем операнде (string1 или string2) на входе, в один экземпляр символа. Это происходит после удаления и перевод завершен.