コロンで区切られた作業文字列があり、各形式はa=b
fooを抽出するために解析する必要があります。ここでfooはです...:di=foo:...
。割り当てはdi=foo
、文字列の先頭、中間、または末尾で行うことができます。
私の考えは、行の先頭またはコロン、文字列、di=
コロンを除くすべての文字、コロン、または行の終わりを一致させることです。
私は「コロンを除くすべての文字」部分だけを機能させました。
いくつかのテスト:
echo "di=a;b:*.di=c;d:ddi=e;f" | sed "s/.*di=\([^:]*\):.*/\1/"
echo "ddi=a;b:di=c;d:*.di=e;f" | sed "s/.*di=\([^:]*\):.*/\1/"
echo "*.di=a;b:ddi=c;d:di=e;f" | sed "s/.*di=\([^:]*\):.*/\1/"
最初の項目も返す必要がありa;b
、2番目c;d
と3番目の項目も返す必要がありますe;f
が、両方とも返されますc;d
。
ベストアンサー1
私の考えは、行の先頭またはコロンを一致させ、次に文字列di =を一致させ、コロンを除くすべての文字を一致させ、次にコロンまたは行の終わりを一致させることです。
例のように、「次のコロンまたは行末」を一致させる必要はありません。
{
echo "di=a;b:*.di=c;d:ddi=e;f"
echo "ddi=a;b:di=c;d:*.di=e;f"
echo "*.di=a;b:ddi=c;d:di=e;f"
} | sed 's/\(^\|.*:\)di=\([^:]*\).*/\2/'
出力:
a;b
c;d
e;f
\(^\|.*:\)
行の先頭または後にコロンが続くすべての文字と一致します。