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