0

引数としてファイルを使用してスクリプトを作成しようとしています。このスクリプトは、テキストファイルを取得して、大文字で始まり、その後に8文字が続く単語を検索します。構文が苦手なので、コードを紹介します。簡単に修正できると思います。

grep -o '[A-Z][^ ]*' $1

それを指定する方法がわかりません:

a)大文字で始まり、

b)それが9文字の単語であること。

乾杯

編集:

編集として、新しいコードを追加したいと思います。

while read p
do
echo $p | grep -Eo '^[A-Z][[:alpha:]]{8}'
done < $1

私はまだそれを動作させることができません、私の新しいコードの助けはありますか?

4

3 に答える 3

2

'[A-Z][^ ]*'AとZの間の1文字に一致し、その後に0個以上の非スペース文字が続きます。したがって、それ自体で任意のAZ文字と一致します。

\b単語の境界を示すために使用し、中括弧内の数量詞を示します。次に例を示します。

grep '\b[A-Z][a-z]\{8\}\b'

もしあなたがちょうどそれをしたならgrep '[A-Z][a-z]\{8\}'、それは(例えば)「aaaaHellosailor」と一致するでしょう。

私はを使用します。拡張正規表現を使用する、とも呼ばれる\{8\}を使用しない限り、中括弧はエスケープする必要があります。使用しているVanillaは、基本正規表現を使用しています。また、これは標準の一部ではありませんが、一般的にサポートされていることに注意してください。grep -Eegrepgrep\b

^最初と最後に使用すると$、「ウィルトシャーの豚は素晴らしいソーセージを作る」の中に「ウィルトシャー」は見つかりません。9文字の代名詞だけで構成されている行だけが見つかります。

于 2012-10-22T18:19:35.247 に答える
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
$ 
于 2012-10-22T17:59:37.750 に答える
0

次の内容の「testfile」という名前のテストファイルがあります。

Aabcdefgh
Babcdefgh
cabcdefgh
eabcd

これで、次のコマンドを使用してこのファイルをgrepできます。

grep -Eo '^[A-Z][[:alpha:]]{8}' testfile

上記のコードは次のとおりです。

cat testfile | grep -Eo '^[A-Z][[:alpha:]]{8}'

これは一致します

Aabcdefgh
Babcdefgh
于 2012-10-22T18:22:10.333 に答える