Как извлечь только английские слова и оставить слова деванагари в сценарии bash?

Текстовый файл такой,

#एक
1के
अंकगणित8IU
अधोरेखाunderscore
$thatऔर
%redएकyellow
$चिह्न
अंडरस्कोर@_

Желаемый текстовый файл должен выглядеть так:

#
1
8IU
underscore
$that
%redyellow
$
@_

Это то, что я пробовал до сих пор, используя awk

awk -F"[अ-ह]*" '{print $1}' filename.txt И результат, который я получаю,

#
1


$that
%red
$

и используя это awk -F"[अ-ह]*" '{print $1,$2}' filename.txt, я получаю такой результат,

# 
1 े
 ं
 ो
$that 
%red yellow
$ ि
 ं

Есть ли способ решить это в сценарии bash?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
96
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Это sed работает?

sed 's/\([0-9a-zA-Z[:punct:]]*\)[^0-9a-zA-Z[:punct:]]*/\1/g' input_file
#
1
8IU
underscore
$that
%redyellow
$
@_

Да, это работает, но у меня были другие строки в моем файле, такие как «$चिह्न» и «अंडरस्कोर@_», где sed выдавал вывод, например «$्न» и «कोर@_» для соответствующих строк. Я отредактировал вопрос сейчас, но мне жаль, что я не добавил эти строки раньше к вопросу.

Wh0r00t 23.04.2022 08:30

@Wh0r00t Добавьте флаг gsed 's/\([0-9a-zA-Z[:punct:]]*\)[^0-9a-zA-Z[:punct:]]*/\1/g' input_file

HatLess 23.04.2022 08:43
Ответ принят как подходящий

Использование перла:

$ perl -CSD -lpe 's/\p{Devanagari}+//g' input.txt
#
1
8IU
underscore
$that
%redyellow
$
@_

-CSD сообщает Perl, что стандартные потоки и любые открытые файлы кодируются в UTF-8. -p перебирает входные файлы, печатая каждую строку в стандартный вывод после выполнения сценария, заданного -e. Если вы хотите изменить файл на месте, добавьте параметр -i.

Регулярное выражение сопоставляет любые кодовые точки, назначенные скрипту деванагари в стандарте Unicode, и удаляет их. Используйте \P{Devanagari}, чтобы сделать наоборот и удалить символы, не относящиеся к Деванагари.

С помощью awk вы можете:

awk '{sub(/[^\x00-\x7F]+/, "")} 1' file
#
1
8IU
underscore
$that
%redyellow

using [\x00-\x7F]. This matches all values numerically between zero and 127, which is the defined range of the ASCII character set. Use a complemented character list [^\x00-\x7F] to match any single-byte characters that are not in the ASCII range.

tr очень хорошо подходит для этой задачи:

LC_ALL=C tr -c -d '[:cntrl:][:graph:]' < input.txt

Он устанавливает среду локали POSIX C, так что допустим только набор символов английского языка США.

Затем поручает tr-d удалить -c дополнить [:cntrl:][:graph:] классы управляющих и нарисованных персонажей (неуправляемых или видимых) персонажей. Поскольку он устанавливает для всех региональных настроек значение C, все символы, не относящиеся к американскому английскому языку, отбрасываются.

Другие вопросы по теме