2つの文字列間の共通文字をキャプチャする方法

2つの文字列間の共通文字をキャプチャする方法

2つの文字列を比較し、次の共通部分をキャプチャします。

  • FILE0000010985.LOG
  • FILE0000010999.LOG
  • FILE0000011000.LOG

1と2を比較すると出力になりたいのFILE00000109ですが、1と3を比較すると出力が2文字少なくなります。FILE000001

それは私が考える共通の接頭辞をキャプチャしますが、文字列は私には知られていないので、Bashの部分文字列一致機能などを使用するのと同じくらい簡単ではありません.

ベストアンサー1

純粋なbashソリューション。 1と2の出力はFILE0000010ではなくFILE00000109です。

#!/bin/bash
arr=(FILE0000010985.LOG
     FILE0000010999.LOG
     FILE0000011000.LOG
    )
for (( i=0; i<${#arr[@]}; ++i )) ; do
    for (( j=i + 1; j<${#arr[@]}; ++j )) ; do
        x=${arr[i]}
        y=${arr[j]}
        p=0
        while [[ ${x:0:p} == ${y:0:p} ]] ; do 
            (( ++p ))
        done
        echo $x $y : ${x:0:p-1}
    done
done

おすすめ記事