「something_something_something」などの文字列があります。
文字列には次のパターンが必要です。^[a-zA-Z0-9](-*[a-zA-Z0-9])*
パターンと一致しない文字列のすべての文字を置き換える方法は?
私の例では、私は次のことを行う必要があります:
somethingsomethingsomething
試してみましたがsed -n '/^[a-zA-Z0-9](-*[a-zA-Z0-9])*/p'
成功しませんでした。
ベストアンサー1
まず、sed -E
パターンが拡張正規表現(ERE)として解釈され、一般括弧がグループ化に使用されるようにする必要があります。デフォルトでは、sedのパターンはBRE(Basic Regular Expressions)であり、およびを使用する必要があり\(
ます\)
。
第二に、それsed -n '/.../p'
はうまくいきますが、部分的に一致する場合は行全体を印刷します。パターンが最後に固定されている場合は、行全体を削除すると便利です。
パターンに合わない部分を削除するには、次の手順を実行します。
sed -E -e 's/^([a-zA-Z0-9](-*[a-zA-Z0-9])*).*/\1/' input.txt
末尾は.*
行全体が一致することを確認し、すべてが最初のキャプチャグループの内容に置き換えられます。 inputの場合、パターンの主要部分と一致しないものとしてsomething_something_something
印刷されます。something
_
あなたのパターンはと同じように見えます[-a-zA-Z0-9]+
。おそらく同様のことを意味するようです[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*
。これはfoo
、または同じ文字列と一致する必要がありますfoo-bar-doodoo
(ただしそうではありませんfoo--bar
)。