如何只提取英文单词并在 bash 脚本中保留 Devanagari 单词?
How to extract only the English words and leaving the Devanagari words in bash script?
文本文件是这样的,
#एक
1के
अंकगणित8IU
अधोरेखाunderscore
$thatऔर
%redएकyellow
$चिह्न
अंडरस्कोर@_
所需的文本文件应该是这样的,
#
1
8IU
underscore
$that
%redyellow
$
@_
这是我迄今为止尝试过的方法,使用 awk
awk -F"[अ-ह]*" '{print }' filename.txt
我得到的输出是,
#
1
$that
%red
$
并使用这个 awk -F"[अ-ह]*" '{print ,}' filename.txt
我得到这样的输出,
#
1 े
ं
ो
$that
%red yellow
$ ि
ं
有没有办法在 bash 脚本中解决这个问题?
这个sed
有效吗?
sed 's/\([0-9a-zA-Z[:punct:]]*\)[^0-9a-zA-Z[:punct:]]*//g' input_file
#
1
8IU
underscore
$that
%redyellow
$
@_
使用 perl:
$ perl -CSD -lpe 's/\p{Devanagari}+//g' input.txt
#
1
8IU
underscore
$that
%redyellow
$
@_
-CSD
告诉 perl 标准流和任何打开的文件都以 UTF-8 编码。 -p
循环输入文件,在执行 -e
给出的脚本后将每一行打印到标准输出。如果要就地修改文件,请添加 -i
选项。
正则表达式匹配分配给 Unicode 标准中梵文脚本的任何代码点并将其删除。使用 \P{Devanagari}
做相反的事情并删除 non-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
,所有 non-US-English 个字符都被丢弃。
文本文件是这样的,
#एक
1के
अंकगणित8IU
अधोरेखाunderscore
$thatऔर
%redएकyellow
$चिह्न
अंडरस्कोर@_
所需的文本文件应该是这样的,
#
1
8IU
underscore
$that
%redyellow
$
@_
这是我迄今为止尝试过的方法,使用 awk
awk -F"[अ-ह]*" '{print }' filename.txt
我得到的输出是,
#
1
$that
%red
$
并使用这个 awk -F"[अ-ह]*" '{print ,}' filename.txt
我得到这样的输出,
#
1 े
ं
ो
$that
%red yellow
$ ि
ं
有没有办法在 bash 脚本中解决这个问题?
这个sed
有效吗?
sed 's/\([0-9a-zA-Z[:punct:]]*\)[^0-9a-zA-Z[:punct:]]*//g' input_file
#
1
8IU
underscore
$that
%redyellow
$
@_
使用 perl:
$ perl -CSD -lpe 's/\p{Devanagari}+//g' input.txt
#
1
8IU
underscore
$that
%redyellow
$
@_
-CSD
告诉 perl 标准流和任何打开的文件都以 UTF-8 编码。 -p
循环输入文件,在执行 -e
给出的脚本后将每一行打印到标准输出。如果要就地修改文件,请添加 -i
选项。
正则表达式匹配分配给 Unicode 标准中梵文脚本的任何代码点并将其删除。使用 \P{Devanagari}
做相反的事情并删除 non-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
,所有 non-US-English 个字符都被丢弃。