Мне нужно заменить все символы, отличные от латинских 1, в тексте большого файла набора данных. Пример похож на
LABEL chini vich 妈妈媽媽 maama
LABEL 南支那海 南シナ海 shabadik ar h ngkhani shina saagar
LABEL ॐ आप्यायन्तु ममाङ्गानि वाक्प्राणश्चक्षुः
где пробел во втором столбце содержит текст, который нужно найти и заменить пробелом. Регулярное выражение для поиска всех символов latin-1 можно получить с помощью классы персонажей, например
echo "chini vich 妈妈媽媽 maama" | sed "s/[[:alnum:]]*//g"
妈妈媽
Моя цель - делай с точностью до наоборот:
echo "chini vich 妈妈媽媽 maama" | sed "s/(SOME REGEX)//g"
chini vich maama
поэтому заменяя любое появление последовательности символов, отличной от латинской 1, пробелом \s.
Я попытался отрицать класс символов [:alnum:], то есть [^A-Za-z0-9], но это не работает.
ПРИМЕЧАНИЕ
Поскольку 1-й столбец не будет содержать никаких символов, отличных от латинского-1, и он будет буквенно-цифровым, не должно быть необходимости применять регулярное выражение ко 2-му столбцу, поэтому я думаю, что можно применить его ко всей строке, поэтому в awk это было бы как $(0).
Для строк, содержащих символы, отличные от latin-1, как в примере ниже, регулярное выражение приведет к пустому 2-му столбцу:
LABEL chini vich maama
LABEL shabadik ar h ngkhani shina saagar
LABEL
Аналогичный вопрос Удалить символы, отличные от ASCII, из CSV касается удаления символов, отличных от ASCI, здесь мы имеем дело с расширением ISO 8859 ASCII. Для получения дополнительной информации, пожалуйста, обратитесь к В чем разница между ASCII, ISO 8859 и Unicode?
Ага! инверсия в порядке, но мне нужно сохранить интервал между символами, но это не сработает sed "s/[^[:alnum:]]*/ /g", потому что он поместит пробелы между всеми символами.
Хорошо, а что если вы попробуете sed -r "s/[^[:alnum:]]+/ /g" (обратите внимание на +)?
@revo sed -r "s/[^[:alnum:]]+/ /g" работает !. Когда на macos опция -r (также известная как расширенное регулярное выражение) - это -E, поэтому это будет echo "chini vich 妈妈媽媽 maama" | sed -E "s/[^[:alnum:]]+/ /g". Спасибо.





Может
[^[:alnum:]]*?