特定のsedコマンドの理解

特定のsedコマンドの理解

こんにちは、研究にもかかわらず、特定のsedコマンドが実行する操作を復号化しようとしましたが、慌てているようです。

sed -E  's/([0-9]+)-([0-9]+)/\2:\1/g'    

答え1

あなたのsed式は、ダッシュの周りのオーバーラップしない正の整数のペアをすべて変更し、ダッシュをコロンに置き換える置換です。

表情が変わるよ

000-212 444-818

入力する

212:000 818:444

これらの(...)ビットは「キャプチャグループ」です。これらのグループは、内部式に一致する部分文字列をキャプチャします。その後、この部分文字列を\1最初のグループ、\22番目のグループなどで使用できます。

キャプチャグループはすべて、文字列など、[0-9]+0から9の空でない数値シーケンスに一致するパターンであるを使用します123000

-2つのグループ間では、データのリテラルダッシュが一致します。

置換文字列は一致する数値グループを使用しますが、一致した数値の逆順で使用して交換します。数字:の間にも代替テキストが挿入されます-

最後に/gsedデータ内で重複しないすべての一致が繰り返し置き換えられます。

ユーティリティで非標準-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'

関連情報