Bash 如何删除包含特定字符串的所有行,但仅当后面的字符是CJK字符时才删除?

Bash 如何删除包含特定字符串的所有行,但仅当后面的字符是CJK字符时才删除?,bash,sed,grep,Bash,Sed,Grep,我需要从包含与读取(符号)匹配的文件中删除所有行,其中(符号)是任何CJK字符。在匹配中,read(symbol)前面紧跟着A-Z或A-Z,但不应删除该行。例如,以下是一些采样线和结果: Do you like to read books? (not deleted) Can you read 书? ( deleted) .read 书. (deleted) This is some thread 线. (not deleted) 如何仅删除那些与(非A-Z或A-Z)read(CJK符号)匹配

我需要从包含与
读取(符号)
匹配的文件中删除所有行,其中
(符号)
是任何CJK字符。在匹配中,
read(symbol)
前面紧跟着A-Z或A-Z,但不应删除该行。例如,以下是一些采样线和结果:

Do you like to read books? (not deleted)
Can you read 书? ( deleted)
.read 书. (deleted)
This is some thread 线. (not deleted)

如何仅删除那些与
(非A-Z或A-Z)read(CJK符号)
匹配的行?

我不完全确定如何匹配CJK字符,但如果匹配非ASCII字符,则可能会得到您想要的结果:

grep -vP "[^A-Za-z]read [\x80-\xFF]" file.txt
理论上,你应该能够做到:

grep -vP "[^A-Za-z]read [\x{2E80}-\x{9FBB}]+" file.txt
然而,在我的测试中,我得到了错误:

grep: character value in \x{...} sequence is too large

编辑:

LC_ALL="POSIX" sed -r '/[^A-Za-z]read [\o200-\o377]+/d' file.txt
结果:

Do you like to read books? (not deleted)
This is some thread 线. (not deleted)
另见:


出于好奇,您是否收到了与我在使用
grep-vP“[^A-Za-z]read[\x{2E80}-\x{9FBB}]+”file.txt时相同的错误消息?
?是的,这也会产生错误,但是,另一种解决方案似乎运行良好。
Do you like to read books? (not deleted)
This is some thread 线. (not deleted)