我将此作为一个新问题提出,因为人们似乎并不理解我原来的问题。
我可以弄清楚如何查找一个单词是否以大写字母开头并后跟 9 个字母的代码:
echo "word" | grep -Eo '^[A-Z][[:alpha:]]{8}'
这就是我应该做的第 1 部分。我的实际脚本应该遍历作为第一个也是唯一一个参数给出的文本文件中的每个单词,然后检查这些单词是否以大写字母开头且长度为 9 个字母。
我试过:
cat textfile | grep -Eo '^[A-Z][[:alpha:]]{8}'
和
while read p
do echo $p | grep -Eo '^[A-Z][[:alpha:]]{8}'
done < $1
没用。
虽然:
cat randomtext.txt
输出:
The loud Brown Cow jumped over the White Moon. November October tesTer Abcdefgh Abcdefgha
所以它正确地输出了文件 randomtext.txt 中的所有单词
那为什么不
cat randomtext.txt | grep -Eo '^[A-Z][[:alpha:]]{8}'
工作?
最佳答案
问题出在 anchor 上。您的模式以 ^
开头,它匹配一行的开头,但您想要返回的单词位于一行的中间。您可以将其替换为 \b
以匹配单词边界。
关于linux - 使用 grep 脚本循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018294/