Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在一堆文件中查找拼写错误的单词_Shell_Unix_Grep_Spell Checking - Fatal编程技术网

Shell 如何在一堆文件中查找拼写错误的单词

Shell 如何在一堆文件中查找拼写错误的单词,shell,unix,grep,spell-checking,Shell,Unix,Grep,Spell Checking,我有大约10k个java文件,我需要在java文件中查找拼写错误的单词,以查找双引号中的字符串 下面是在双引号中给我的字符串 find-名称“*.java”-execgrep-Po'.*”?“{}\ 但是我不知道如何使用拼写。我只有可用的Linux和ispell,因此如果您不在Linux上,以下可能对您不起作用(按原样)。如果你只是想找到拼写错误的单词,并列出建议,那么你可以使用 find . -name "*.java" -exec grep -Po '"([^"\\]|\\.)*"' {}

我有大约10k个
java
文件,我需要在
java
文件中查找拼写错误的单词,以查找
双引号中的字符串

下面是在
双引号中给我的字符串

find-名称“*.java”-execgrep-Po'.*”?“{}\


但是我不知道如何使用
拼写

我只有可用的Linux和
ispell
,因此如果您不在Linux上,以下可能对您不起作用(按原样)。如果你只是想找到拼写错误的单词,并列出建议,那么你可以使用

find . -name "*.java" -exec grep -Po '"([^"\\]|\\.)*"' {} \; \
| ispell -a -S
-a
选择管道模式,
-S
禁用排序,该排序倾向于首先列出更好的替换项

如果要将字符串固定到位,则可能需要使用以下内容

TEMP=`mktemp`
find . -name "*.java" | xargs grep -l '"...*"' \
| xargs echo /usr/bin/ispell -F ./so20836228-java-deformatter.sh > $TEMP
source $TEMP
这将生成使用以下ispell Java“deformatter”的拼写检查命令:

使用此实验性变形器的风险自负。 在处理文件之前先备份它们。 (变形器中的错误可能会损坏拼写检查文件。 请参阅ispell手册第页: 程序必须为每个输入字符生成恰好一个字符的输出,否则ispell将失去同步并损坏输出文件。
)

我没有回答你的问题,但是你的find语句没有正确处理转义引号。@user2799037他的
find
grep
看起来不错
#!/bin/sh
# Experimental Java ispell deformatter: use at your own risk!
/bin/sed -e '1,$ {
# introduce per-character state
s/\(.\)/\1_/g
# mark string literals
s/"_\(\(\([^"\\]_\|\\_._\)\)*\)"_/"B\1"E/g
# wipe out chars before string literals
:b s/._\(.\)B/ B\1B/g ; t b
# wipe out chars after string literals
:e s/\(.\)E._/\1E E/g ; t e
# remove per-character state
s/\(.\)./\1/g
# get rid of escape sequences
s/\\./  /g
}'