Linuxでテキストの選択と置換に関連する簡単なクエリがあります。 sed
コマンドを使用しています。次のテキストがあります。
こんにちは、私は表示用の単なるテキストです。
Linuxで次のコマンドを使用してそれを行うことができる場合にのみ、「hello world」に印刷したい。
echo "hello world, I am just simple text for display." | sed 's/, I am.*//g'
今、私はこの関数を完全に逆にしたいのですが、sed
のような単純なコマンドを使用して「hello world」を削除するにはどうすればよいですか。
必要な出力:
、私は表示用の単なるテキストです。
Linuxコマンド(sed
など)が使用されている場合、私は好むでしょう。
コマンドの効果を逆にし、一致する文字列の同じ部分を保持するには(これが文字列の唯一の修正部分であり、変化する可能性のある他の部分を削除すると仮定します)、次のようにできます:
echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g'
結果:
, I am just simple text for display
正規表現がしていること:
この方法では、文字列の同じ部分を使用して照合を行い、質問のコマンドとまったく逆の効果が得られます。
$ echo "hello world, I am just simple text for display." | sed 's/^hello world//' , I am just simple text for display.
説明:sed(およびvimなど)では、carat(^
)を使用して行の開始を示します。置換により、そのテキストのみが削除されます。
sed
オプションs
を使用できます。コマンドは、
echo "hello world, I am just simple text for display."|sed 's/.*, //g'
与える
I am just simple text for display.
説明
.*
は、任意の数の任意の文字と一致します,<space>
一致、およびスペース.*,<space>
の組み合わせは、の前のすべて、および両方を含むスペースに一致し、それらを何も置き換えません。