web-dev-qa-db-ja.com

Linuxのsedコマンドを使用して、特定の選択された特定のWordのテキストを最初から削除するにはどうすればよいですか

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など)が使用されている場合、私は好むでしょう。

4

コマンドの効果を逆にし、一致する文字列の同じ部分を保持するには(これが文字列の唯一の修正部分であり、変化する可能性のある他の部分を削除すると仮定します)、次のようにできます:

echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g'

結果:

, I am just simple text for display

正規表現がしていること:

  • ^。*:次の式まで文字列の先頭の任意の文字に一致
  • \(&\):間にある式と一致する文字列の部分をキャッチします(\でエスケープする必要があります。そうしないと、括弧文字と一致します)。
  • 、私は。*:あなたが私たちに与える試合、
  • \ 1:括弧内の最初の部分式の一致の結果に置き換えられます

この方法では、文字列の同じ部分を使用して照合を行い、質問のコマンドとまったく逆の効果が得られます。

5
Benoit

$ echo "hello world, I am just simple text for display." | sed 's/^hello world//' , I am just simple text for display.

説明:sed(およびvimなど)では、carat(^)を使用して行の開始を示します。置換により、そのテキストのみが削除されます。

1
Andrew

sedオプションsを使用できます。コマンドは、

echo "hello world, I am just simple text for display."|sed 's/.*, //g'

与える

I am just simple text for display.

説明

  • .*は、任意の数の任意の文字と一致します
  • ,<space>一致、およびスペース
  • したがって、.*,<space>の組み合わせは、の前のすべて、および両方を含むスペースに一致し、それらを何も置き換えません。
1
Registered User