一致する単語を正確にインポートする

一致する単語を正確にインポートする

私はいくつかの質問を見つけましたが、私の質問に満足して答えることができませんでした。

単語を含む行ではなく、パターンに正確に一致する単語を印刷する必要があります。たとえば、

私は家に帰ります。気になるところが家です。

したがって、「ホーム」パターンで検索すると

ホームホームページ

私は理解 grep -o 私の仕事は簡単になりますが、 私のもの grep このオプションはサポートされていません。だから別の解決策が必要です。

また、正確な一致が必要です。したがって、単語がある場合は選択homelessから選択しないでください。

答え1

一緒に遊ぶ人perl

$ echo 'I am going home. Home is where heart is.' | 
    perl -lne 'for (split /\W+/) {print $& if /\bhome\b/i}'

短く調整ジョセフR.以下のコメント(彼に感謝)

$ echo 'I am going home. Home is where heart is.' | 
    perl -lne 'print $& while /\bhome\b/ig'

結果:

home
Home

答え2

あなたはそれを使用することができますtr単語区切り記号を正規化してからgrep一致する単語を印刷します(-Fx正確な一致文字列と大文字と-i小文字の区別オプションを使用)。

tr -cs A-Za-z \\n | grep -Fxi home

ASCII以外のロケールを使用している場合は、多くの実装が文字以外のバイトtrとして機能することに注意してください。 sedなどの他のツールを使用して単語区切り記号の正規化を実行します。

sed 's/[^[:alpha:]][^[:alpha:]]*/\n/g' | grep -Fxi home

この回答のすべてのコマンドはPOSIX標準です。

答え3

使用awk:

echo "I am going home. Home is where heart is. I dont like Homework." | awk '{for(i=1;i<=NF;i++) {gsub(/[^a-zA-Z0-9]/,"",$i); if(match(tolower($i),/^(home)$/))print $i;}}'

出力:

home.
Home

答え4

printf %s\\n 'I am going home. Home is where the heart is.' | 
sed 's/\([hH]ome\)*.\{,1\}/\1/g'

出力

ホームホームページ

関連情報