从 Bash 中的字符串中删除所有特殊字符
Removing all special characters from a string in Bash
我有很多小写文本,唯一的问题是,有很多特殊字符,我也想用数字将其全部删除。
下一个命令不够强大:
tr -cd '[alpha]\n '
对于 éćščž 和其他一些人,returns“?”但我想删除所有这些。有没有更强的命令?
我使用 linux mint 4.3.8(1)-release
我不确定你的问题中的文本来自哪里,但可以说 "lot of text in lowercase" 在名为 special.txt
的文件中你可以做类似下面的事情但更专注关于您要保留的字符:
cat special.txt | sed 's/[^a-z A-Z]//g'
虽然有点像用斧头做手术。
postRemove non-ascii characters from ...
中的另一种可能的解决方案
如果以上没有解决您的问题,请尝试提供更多详细信息,我可能会提供更具操作性的答案。
您可以使用 tr
仅打印字符串中的可打印字符,如下所示。只需在您的输入文件上使用以下命令。
tr -cd "[:print:]\n" < file1
标志 -d
用于删除输入流参数中定义的字符集,而 -c
用于补充这些字符集(反转提供的内容)。因此,如果没有 -c
,该命令将从输入流中删除所有可打印字符,并使用它通过删除 non-printable 字符来补充它。我们还保留换行符 \n
以保留输入文件中的行结尾。删除它只会在一大行中产生最终输出。
[:print:]
只是一个 POSIX bracket expression,它是表达式 [:alnum:]
、[:punct:]
和 space 的组合。 [:alnum:]
与 [0-9A-Za-z]
相同,[:punct:]
包含字符 !
"
#
$
%
&
'
(
)
*
+
,
-
.
/
:
;
<
=
>
?
@
[
\
]
^
_
`
{
|
}
~
只是想添加我的一点。下面的代码将更好地摆脱上面解释的所有字符,并将它们替换为 space 并同时保留换行符
tr -s "[:punct:]" " "
来自手动输入 -s
Squeeze multiple occurrences of the characters listed in the last operand (either string1 or string2) in the input into a single instance of the character. This occurs after all deletion and translation is completed.
我有很多小写文本,唯一的问题是,有很多特殊字符,我也想用数字将其全部删除。
下一个命令不够强大:
tr -cd '[alpha]\n '
对于 éćščž 和其他一些人,returns“?”但我想删除所有这些。有没有更强的命令?
我使用 linux mint 4.3.8(1)-release
我不确定你的问题中的文本来自哪里,但可以说 "lot of text in lowercase" 在名为 special.txt
的文件中你可以做类似下面的事情但更专注关于您要保留的字符:
cat special.txt | sed 's/[^a-z A-Z]//g'
虽然有点像用斧头做手术。
postRemove non-ascii characters from ...
中的另一种可能的解决方案如果以上没有解决您的问题,请尝试提供更多详细信息,我可能会提供更具操作性的答案。
您可以使用 tr
仅打印字符串中的可打印字符,如下所示。只需在您的输入文件上使用以下命令。
tr -cd "[:print:]\n" < file1
标志 -d
用于删除输入流参数中定义的字符集,而 -c
用于补充这些字符集(反转提供的内容)。因此,如果没有 -c
,该命令将从输入流中删除所有可打印字符,并使用它通过删除 non-printable 字符来补充它。我们还保留换行符 \n
以保留输入文件中的行结尾。删除它只会在一大行中产生最终输出。
[:print:]
只是一个 POSIX bracket expression,它是表达式 [:alnum:]
、[:punct:]
和 space 的组合。 [:alnum:]
与 [0-9A-Za-z]
相同,[:punct:]
包含字符 !
"
#
$
%
&
'
(
)
*
+
,
-
.
/
:
;
<
=
>
?
@
[
\
]
^
_
`
{
|
}
~
只是想添加我的一点。下面的代码将更好地摆脱上面解释的所有字符,并将它们替换为 space 并同时保留换行符
tr -s "[:punct:]" " "
来自手动输入 -s
Squeeze multiple occurrences of the characters listed in the last operand (either string1 or string2) in the input into a single instance of the character. This occurs after all deletion and translation is completed.