我有一个法语令牌的文件,每个都用换行符分隔。该文件名为fr_notime.txt,如下所示:
bonne-chance
d'
être
l'
heureux
élu
»
,
écrit
-
il
sur
sa
25
我希望丢失标点符号和数字,但不会像d'
中那样失去收缩,也不会失去bonne-chance
中的复合词,因此在同一个之间使用连字符或短划线。
我的解决方案是逐行读取文件,并根据其内容进行处理。我将以下内容写成.sh脚本 -
while IFS='' read -r line || [[ -n "$line" ]];
do
if ( [[ $line =~ "[[:alpha:]]+'|-[[:alpha:]]+" ]] );
then
echo "$line : .............................................Exception"
elif ( [[ $line =~ "[[:punct:]0-9]" ]] );
then
echo "$line : 11111111111 Digit or Punct"
else
echo "$line : Regular"
fi
done < "fr_notime.txt"
Q1。这只是一个基本的脚本,可以知道我是否正确过滤它们,但不知怎的,它只是为每个标记返回Regular
。有什么我想念的吗?
PS-我试图删除;在if段之后,但无济于事。
在删除sh文件中的双引号后,此部分已解决。但是,第二季度仍然没有答案。
Q2。在尝试使用grep和perl regex在命令行上解决它时,我使用了以下代码 -
grep -P "(?![[:alpha:]]+'|-[[:alpha:]]+)[[:punct:]0-9]" fr_notime.txt | less
该命令始终返回,因为找不到匹配项。
我可能错了,但这两者都应该有一个共同点。我做错了什么和/或错过了什么?
提前致谢
答案 0 :(得分:0)
我喜欢使用perl正则表达式语法;
grep -vP "^\s*\d+\s*$|^\s*\W+\s*$" fr_notime.txt
bonne-chance
d'
être
l'
heureux
élu
écrit
il
sur
sa
正则表达式解释道。正在搜索两种模式;两者都使用^表示行的开头,$表示eol,而\ s *表示捕获任何空格。 \ d +找到一个或多个数字,\ W +找到一个或多个非单词,非空白字符。 grep选项,-v反转匹配,-P告诉grep使用perl语法。
-Cheers