こんにちは、研究にもかかわらず、特定のsedコマンドが実行する操作を復号化しようとしましたが、慌てているようです。
sed -E 's/([0-9]+)-([0-9]+)/\2:\1/g'
答え1
あなたのsed
式は、ダッシュの周りのオーバーラップしない正の整数のペアをすべて変更し、ダッシュをコロンに置き換える置換です。
表情が変わるよ
000-212 444-818
入力する
212:000 818:444
これらの(...)
ビットは「キャプチャグループ」です。これらのグループは、内部式に一致する部分文字列をキャプチャします。その後、この部分文字列を\1
最初のグループ、\2
2番目のグループなどで使用できます。
キャプチャグループはすべて、文字列など、[0-9]+
0から9の空でない数値シーケンスに一致するパターンであるを使用します123000
。
-
2つのグループ間では、データのリテラルダッシュが一致します。
置換文字列は一致する数値グループを使用しますが、一致した数値の逆順で使用して交換します。数字:
の間にも代替テキストが挿入されます-
。
最後に/g
、sed
データ内で重複しないすべての一致が繰り返し置き換えられます。
ユーティリティで非標準-E
オプションを有効にするsed
拡大するBRE(基本正規表現)の代わりに正規表現(ERE)が使用されますsed
。 EREではキャプチャグループが作成されます(...)
が、BREは\(...\)
。 BREはまた、+
空でない一致する式シーケンスを指定する必要はありません\{1,\}
。
したがって、コマンドを移植可能なものとして作成することもできます。
sed 's/\([0-9]\{1,\}\)-\([0-9]\{1,\}\)/\2:\1/g'
または
sed 's/\([0-9][0-9]*\)-\([0-9][0-9]*\)/\2:\1/g'