スペースと改行文字を含む文字列を見つける方法

スペースと改行文字を含む文字列を見つける方法

grepコマンドを使用して、スペースと改行文字を含む文字列を選択できるかどうか疑問に思います。たとえば、次のようになります。

Hello
I
am
here right now

私はまだ正規表現と一般的なコマンドラインの使用に慣れていないので(これを学ぶか二日目です)、私が試したことは次のとおりです。

grep H[\s\S]*w <filename>

私は [\s\S] 。とは異なり、スペースや改行を含むすべての文字を提供すると思いましたが、うまくいきません。

私はMac OSで端末を使用しています(これが重要かどうかはわかりません)。

答え1

grepオンラインで作業してください。「あなたはそうできません」bash;しかし、このようなことをする必要があるとき気分が悪い/できないまたは似たようなものを使ってperl(または正直に言って、単に使いたかったgrep)私は次のようにしました:

tr '\n' '\a' < <filename> | grep --only-matching Hello$'\a'I$'\a'am$'\a'here\ right\ now | tr '\a' '\n'

trここでは文字を翻訳します。新しい行到着ベルASCII文字 [16進コード\x07または'\a']を入力して処理しますgrepgrepここでは長い行文字列が表示されます)。ベルASCII文字変える新しいチーム文字)その後、「一般」に戻って翻訳します。ベルASCII文字到着新しいチーム

使用する必要はありませんベルASCII文字:ファイルに表示されない文字を使用できます。私の場合、数字7が好きで、通常テキストファイルにはどの文字も含まれません。ベルASCII文字

今:$'\a'はいバッシュANSI-C引用

答え2

この試み:

sed -e '1h;2,$H;$!d;g' -re 's/(.*)(H\w+\n)(.*w\n)(.*)/\2\3/' test.txt

test.txt ファイルには以下が含まれます。

Something 
Hello
I
am
here right now
Something else

テストの目的で、sed (GNU sed) 4.4Homebrewを使用してmacOSにGNU sedをインストールできます。 macOSのデフォルトのsedは、わずかに異なるオプションを持つBSD sedです。

乾杯、

関連情報