私はGNU sedの魂を見つけ、似たようなものを見つけました\1
が、端末はそれが「REで定義されていません」と言いました。
しかし、私がしたいのはこれです。
このような文字列がある場合は、sinder-city1.gif
これを実行したいと思いますsinder-city.gif
。さまざまな文字列に対してこれを行うため、文字列全体を置き換えたり、.gifまたはその前のすべての数字を削除したりすることはできません。他のパターンがある場合
sinder-city2.gif
sinder-city3.gif
私は彼らがそのままになることを願っています。
私はそれを交換したくありません。一致させようと入るのをsed 's,[a-z]1.gif,
除けばそれが残りますねsinder-cit.gif
。どのように一致させますかy
?
私はこれをしたい:
sed 's,[a-z]1.gif,[here is the last letter].gif,g'
BSD sedで動作する必要があります。
答え1
sed 's,\([a-z]\)1\.gif$,\1.gif,g'
または許可したい場合1
sed 's,\([^0-9]\)1\.gif$,\1.gif,g'
バックスラッシュ角かっこ構造は、キャプチャリンググループを区別します。FreeBSD マニュアルページ「角かっこ式」と呼ばれます(角かっこを使用しても、角かっこは異なる意味を表します)。 sedは拡張正規表現(ERE)ではなく、デフォルトの正規表現(BRE)を使用します。マニュアルページでは ERE について説明し、最後の段落では BRE 構文と ERE 構文の違いについて説明します。見つけました。POSIX仕様ここでは、キャプチャグループを呼び出してBSDのマニュアルページよりも読みやすくします。逆参照式。これGNU sed マニュアルどちらよりも読みやすいです。 GNU 拡張機能で説明することを避けます。
キャプチャリンググループ(逆参照式とも呼ばれます)が与えられると、代替テキストにバックスラッシュ+数字を使用して、「対応するキャプチャリンググループと一致するテキスト」を意味できます。たとえば、\1
代替テキストのテキストは、正規表現の最初のキャプチャグループに一致するテキストで置き換えられます。これには、前の文字をキャプチャするキャプチャグループがあります1.gif
。
文字通り点を一致させる1.gif
ように変更し、行末のみに一致するように末尾を追加しました。1\.gif
$
キャプチャリンググループの別の例を挙げると、任意の拡張に対してタスクを実行するには、次のようなものを使用できます。
sed 's,\([^0-9]\)1\(\.[^./]*\)$,\1\2,g'