Удаление всех специальных символов из строки в 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) на входе, в один экземпляр символа. Это происходит после удаления и перевод завершен.