linux - 使用 grep 脚本循环

标签 linux bash grep

我将此作为一个新问题提出,因为人们似乎并不理解我原来的问题。

我可以弄清楚如何查找一个单词是否以大写字母开头并后跟 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/

相关文章:

linux - 我试图通过串口发送一个命令列表,但只有第一行被设备占用,其他的被忽略

c - System V 信号量多次递增/递减

bash脚本: wildcard expression is not processed as expected

bash - 使用 ffmpeg 将 .wav 转换为 .mp3 需要什么编解码器?

unix - 使用 grep 和 sed 将一个字符串替换为另一个字符串

linux - 如何从 ffmpeg 输出中提取持续时间?

c - Linux C : How to know the default interface for internet access?

macos - OSX 中正确的 .bash_profile

javascript - javascript中的交互式grep?

linux - 每次显示时从两种模式之间获取文本