すべてのコロンの発生とその周辺の値をタブに置き換える[閉じる]

すべてのコロンの発生とその周辺の値をタブに置き換える[閉じる]

助けてくれてありがとう。私はこれをしました:

cat file1.txt | sed 's/1:2=//'| sed 's/1:3=//'| sed 's/1:4=//'| sed 's/1:5=//'| sed 's/1:6=//'| sed 's/2:3=//'| sed 's/2:4=//'| sed 's/2:5=//'| sed 's/2:6=//'| sed 's/3:4=//'| sed 's/3:5=//'| sed 's/3:6=//'| sed 's/4:5=//'| sed 's/4:6=//'| sed 's/5:6=//' > file2.txt

満足していますが、これ以上の組み合わせ(上記の例の3つだけでなく、16の治療で可能なすべての組み合わせ)を含むファイルがあり、120の組み合わせをすべて入力したくありません。すべてのコロンとその周辺の数字を空白に置き換える方法を見つけるのに役立ちますか?

ベストアンサー1

ここで重要なのは、要件に合った正規表現を見つけることです。

例えば、

sed 's/[0-9]:[0-9]=//'

これはあなたが書いたすべてのパターンと一致しますが、それとも一致します。3:2=これはおそらくあなたが望むものではありません。

ただし、次の機能が利用可能である必要があります。

sed 's/1:[2-6]=//;s/2:[3-6]=//;s/3:[4-6]=//;s/4:[56]=//;s/5:6=//'

これはすでに多くのタイピングを減らします。

数字が1桁を超えると問題になります。たとえば、次の2つのモードに分けられます。

s/5:[6-9]=//;s/5:1[0-6]=//

ただし、ある時点でツールはより適切にawk見えますperl

#!/usr/bin/perl
  
while (<>){
    chomp;
    if (/(.*)([0-9]+):([0-9]+)=(.*)/){
        if ($2<$3){
            print "$1$4";
        }
        else {
            print "$1$2i:$3=$4\n";
        }
    }
}

おすすめ記事