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 bash
。Parameter 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.