sedを使用してファイル内の3文字のみを含む単語を検索する

sedを使用してファイル内の3文字のみを含む単語を検索する

3文字の単語のみを印刷するだけですが、単語文書は番号付きのリストです。

私が答えるべき正確な質問は次のとおりです。

ファイル内の文字クラスコマンドを使用して、sed長さが3文字にすぎないすべての動物名を見つけます。[[:lower:]]animals(3点)

私が試したことは次のとおりです。

cat animals | sed '/{[:lower:]].../d'  
cat animals | sed '/{[:lower:]]/d' 
sed '/[[:lower:]]{3}/d' animals

animalsこれは(ファイル)で単語を見つけるためのファイルです。

01. aardvark
02. badger
03. cow
04. dog
05. elephant
06. fox
07. goose
08. horse
09. iguana
10. jackal
11. koala
12. lamb
13. mongoose
14. narwhal
15. onyx
16. pig
17. quail
18. rat
19. snake
20. tiger
21. umbrellabird
22. vulture
23. walrus
24. xerus
25. yak
26. zebra

私はコードで[[:lower:]]を何度も使用できないことを発見しました。これを行う方法はありますか?

ベストアンサー1

sedストリームエディタです。つまり、テキストを読み、編集し、結果を出力します。必ずしもファイルを処理する必要はなく、テキストストリームのみを処理するだけです。 (あなたの場合、テキストストリームはファイルから出てくるので、実際の違いはありません。)

以下を使用してsedいくつかのオプションがあります。

  1. 3つの連続した小文字を含まないすべての行を削除すると、残りの行は渡され印刷されます。
  2. 正確に3つの連続した小文字を含む行のみを印刷します。

どちらの場合も、その3文字の前にスペースがあり、その後に何もないことを確認する必要があります。

これにより、4文字以上の単語が一致し、一致する行が削除されます。シーケンスの終わりをバインドしないので、より長いシーケンスの中央に一致します。

sed '/[[:lower:]][[:lower:]][[:lower:]][[:lower:]]/d' animals

これは与えられたファイルに対して機能しますが、2文字(または1文字)の動物がいる可能性を考慮しません。 (例えば、「牛」を考えてみてください)。したがって、私たちはそれらを取り除かなければなりません。この時点で、各行にsed複数のタスクを順番に適用する必要があることを知らせる必要があります。また、$正規表現が行の末尾にバインドされることを宣言する新しい文字を導入する必要があります。

  • 1行に4文字がある場合は、その行を削除してください。
  • スペース、2 文字、行の末尾を見つけたら、行を削除します。
  • 空白、文字、行の終わりを見つけたら、行を削除します。

これは、次のように長い形式で書くことができます。

sed -e '/[[:lower:]][[:lower:]][[:lower:]][[:lower:]]/d' -e '/ [[:lower:]][[:lower:]]$/d' -e '/ [[:lower:]]$/d' animals

適切なバージョンがあれば、sedより読みやすい形式に縮小できます。 (-rフラグを探してください。)

おすすめ記事