Bash 如何计算文件中每行的字符数,不包括特定字符的列表?

Bash 如何计算文件中每行的字符数,不包括特定字符的列表?,bash,Bash,如何计算文件中出现的字符数,减去特定列表中的字符数。下面是一个示例文件: 你好吗? 我很好,你呢? 我也很好。 我想从计数中排除任何出现的?、、和。输出如下所示: 3 5 4 试一试 sed部分删除不需要的字符,而perl部分统计剩余的字符 一种方法是从流中删除这些字符,然后使用wc-m。下面是一个使用perl删除字符的示例: perl -pe 's/(\?|,|,|。)//g' file.txt | \ while read -r line; do printf "$lin

如何计算文件中出现的字符数,减去特定列表中的字符数。下面是一个示例文件:

你好吗?
我很好,你呢?
我也很好。
我想从计数中排除任何出现的
。输出如下所示:

3
5
4
试一试


sed
部分删除不需要的字符,而
perl
部分统计剩余的字符

一种方法是从流中删除这些字符,然后使用
wc-m
。下面是一个使用perl删除字符的示例:

perl -pe 's/(\?|,|,|。)//g' file.txt | \ 
  while read -r line; do 
    printf "$line" | wc -m ; 
  done

一个简单的解决方案,接近,但使用
awk

sed 's/[?,。]//g' file | awk '{ print length($0) }'
或者更简单:

tr -d [?,,。] <file | wc -m
tr-d[?,.]纯bash解决方案:

while IFS= read -r l; do
    l=${l//[?,。]/}
    echo "${#l}"
done < file
而IFS=read-rl;做
l=${l/[?,.]/}
回声“${l}”
完成<文件

我们都使用了
perl
,但都是在管道的另一侧。唯一的问题是我不太确定perl如何处理unicode。不是perl方面的专家。管道
sed
perl
感觉非常多余
perl-CAS-nle的//[,.?]///g;打印长度“
起到了作用。它可能是perl专业人士使用的。但是从一个perl新手的角度来看,sed+minimum perl没有那么吓人,只是perl替换看起来与
sed
替换完全一样。请参阅我对jordanm答案的评论。
perl-lne的//[?,。]//g;打印长度
Awk可以进行替换-无需使用
sed
<代码>awk'{gsub(“[?,.]”,“”);打印长度()}'
while IFS= read -r l; do
    l=${l//[?,。]/}
    echo "${#l}"
done < file