我正在尝试编写一个脚本,其中一个文件作为一个参数,用于查找文本文件以查找以大写字母开头且后面有8个字母的任何单词。我的语法很糟糕,所以我会告诉你我的代码,我相信这很容易解决。
grep -o '[A-Z][^ ]*' $1
我不确定如何指定:
a)以大写字母开头,
b)这是一个9个字母的单词。
干杯
编辑:
作为编辑,我想添加新代码:
while read p
do
echo $p | grep -Eo '^[A-Z][[:alpha:]]{8}'
done < $1
我仍然无法使用它,对我的新代码有任何帮助吗?
答案 0 :(得分:2)
'[A-Z][^ ]*'
将匹配A和Z之间的一个字符,后跟零个或多个非空格字符。所以它会匹配任何A-Z角色。
使用\b
表示单词边界,并在大括号内指示量词,例如:
grep '\b[A-Z][a-z]\{8\}\b'
如果您刚刚grep '[A-Z][a-z]\{8\}'
匹配(例如)“aaaaHellosailor”。
我使用\{8\}
,除非您使用grep -E
(也称为egrep
,使用扩展正则表达式),否则需要对其进行转义。您正在使用的Vanilla grep
使用Basic Regular Expressions。另请注意,\b
不是标准的一部分,但通常受支持。
如果您在开始时使用^
而在结尾使用$
那么它将不会在“威尔特郡的猪制作香肠”中找到“威尔特郡”,它只能找到的行只是由一个9个字符代词组成,没有别的。
答案 1 :(得分:1)
这对我有用:
$ echo "one-Abcdefgh.foo" | grep -o -E '[A-Z][[:alpha:]]{8}'
$ echo "one-Abcdefghi.foo" | grep -o -E '[A-Z][[:alpha:]]{8}'
Abcdefghi
$
请注意,这不会处理扩展名或前缀。如果你想强制输入为9个字母的大写单词,我们需要更明确:
$ echo "one-Abcdefghij.foo" | grep -o -E '\b[A-Z][[:alpha:]]{8}\b'
$ echo "Abcdefghij" | grep -o -E '\b[A-Z][[:alpha:]]{8}\b'
$ echo "Abcdefghi" | grep -o -E '\b[A-Z][[:alpha:]]{8}\b'
Abcdefghi
$
答案 2 :(得分:0)
我有一个名为'testfile'的测试文件,其中包含以下内容:
Aabcdefgh
Babcdefgh
cabcdefgh
eabcd
现在,您可以使用以下命令在此文件中进行grep:
grep -Eo '^[A-Z][[:alpha:]]{8}' testfile
上面的代码等于:
cat testfile | grep -Eo '^[A-Z][[:alpha:]]{8}'
匹配
Aabcdefgh
Babcdefgh