助けてくれてありがとう。私はこれをしました:
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";
}
}
}