sed は = を区切り文字として使用します。

sed は = を区切り文字として使用します。

sed特定の区切り文字の前にテキストを切り取る方法を見つけるのに問題があります。

私が受け取った出力は、echo次の結果を返します。

valueA=TEXT

sedまず、テキストを切り取り、テキストだけを残したいと=思います。

これを行う方法についての提案はありますか?

答え1

以下も使用できますcut

cut -d= -f2- <<< "$yourvar"

または

some_command | cut -d= -f2-
  • -d=区切り文字を次のように設定します。=
  • -f2-2番目のフィールドと下のすべてのフィールドを許可します。

答え2

@Archemarのコメントによると、おそらく答えになるでしょう。

sed -e s/^[^=]*=//

@Baard Kopperudのコメントによると、sedコマンドは次のように解釈できます。

(^)で始まる行(s /)を「=」([^ =])を除く任意の数の文字(*)で置き換え、その後に等号記号(=なし(//))を付けます。これにより、行の先頭から同等の曲を含むすべての内容が削除され、「=」の後に続く内容だけが残ります。等号が複数ある場合は「[^=]*」が必要です。 最初の等号だけを削除したいと思います。 「.*」だけを使用すると、正規表現はできるだけ長く「欲しい」と、できるだけ左から始まるので、最後の等号を切り捨てて含めることになります。

答え3

私は次から出力を受けています。echo

変数として設定すると、echoシェルに組み込まれた文字列操作機能を使用できます。

# Instead of value=$(echo "$var" | cut -d= -f2-)
value=${var#*=}

これは何でも*=似合うグローバルスタイルのパターンです*#パターンが変数から削除されるプレフィックスと一致することを示します。

これは最終的にパイピングするよりも速くて安定しています。なぜなら、echoそれを引き起こす可能性のある痛みを伴う問題xpg_echo(および他の解析問題)を防ぎ、echo分岐を防ぐからです。

以下を使用してキーを取得することもできます。

key=${var%%=*}

貪欲が%%マッチングではなくマッチングに使用されることを参照してください。%これを行うと、=潜在的な問題が原因で問題は発生せず、値に署名されます。

構文は、以下に説明されていますman bashParameter Expansion

   ${parameter#word}
   ${parameter##word}
          Remove matching prefix pattern.  The word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          the  beginning of the value of parameter, then the result of the
          expansion is the expanded value of parameter with  the  shortest
          matching  pattern  (the ``#'' case) or the longest matching pat‐
          tern (the ``##'' case) deleted.  If parameter is  @  or  *,  the
          pattern  removal operation is applied to each positional parame‐
          ter in turn, and the expansion is the resultant list.  If param‐
          eter  is  an array variable subscripted with @ or *, the pattern
          removal operation is applied to each  member  of  the  array  in
          turn, and the expansion is the resultant list.

   ${parameter%word}
   ${parameter%%word}
          Remove matching suffix pattern.  The word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a  trailing portion of the expanded value of parameter, then the
          result of the expansion is the expanded value of parameter  with
          the  shortest  matching  pattern (the ``%'' case) or the longest
          matching pattern (the ``%%'' case) deleted.  If parameter  is  @
          or  *,  the  pattern  removal operation is applied to each posi‐
          tional parameter in turn, and the  expansion  is  the  resultant
          list.   If  parameter is an array variable subscripted with @ or
          *, the pattern removal operation is applied to  each  member  of
          the array in turn, and the expansion is the resultant list.

関連情報