What is a shell command to find the longest common substring of two strings in unix?
I am not sure if there is a single command that does the job for you but the following bash script should do it.
#!/bin/bashword1="$1"word2="$2"if [ ${#word1} -lt ${#word2} ]then word1="$2" word2="$1"fifor ((i=${#word2}; i>0; i--)); do for ((j=0; j<=${#word2}-i; j++)); do if [[ $word1 =~ ${word2:j:i} ]] then echo ${word2:j:i} exit fi donedone
save the above as a file substr.shdo chmod +x substr.sh
pranithk @ ~09:24:32 :) $ ./substr.sh 'abcdefghi' 'abcdeghi'abcdepranithk @ ~09:24:33 :) $ ./substr.sh 'abcdefghi' 'abjklmdefnop'def
This is known as the longest common subsequence problem and there are some great algorithms for it. Check out the dynamic programming solution (If you google it, you'll find a ton of implementations). If you really want to understand this at an algorithmic level, check out this MIT lecture,