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']を入力して処理しますgrep
(grep
ここでは長い行文字列が表示されます)。ベル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.4
Homebrewを使用してmacOSにGNU sedをインストールできます。 macOSのデフォルトのsedは、わずかに異なるオプションを持つBSD sedです。
乾杯、