Bash脚本找到两个字符串之间的差异

时间:2010-07-11 16:55:59

标签: bash

鉴于这两个字符串:

"12345"
"1245"

如果第一个字符串是完整字符串而第二个字符串中缺少第一个字符串,我希望它返回“3”。

再次:

"The ball is red"
"The is red"

我想回“球”

我尝试过差异:

diff <(echo "12345") <(echo "1245")

但差异没有给出所需的输出。 comm不会做我想做的事。

2 个答案:

答案 0 :(得分:4)

我认为comm是正确的命令:

comm -23 <(tr ' ' $'\n' <<< 'The ball is red') <(tr ' ' $'\n' <<< 'The is red')

或更灵活:

split_spaces() { tr ' ' $'\n' <<< "$1"; }
split_chars() { sed $'s/./&\\\n/g' <<< "$1"; }
comm -23 <(split_spaces 'The ball is red') <(split_spaces 'The is red')
comm -23 <(split_chars 12345) <(split_chars 1245)

答案 1 :(得分:1)

仅使用一个外部可执行文件:

a='The ball is red'
b='The is red'
join -v 1 <(echo "${a// /$'\n'}") <(echo "${b// /$'\n'}")

在没有空格的字符串上使用joingrep

a=12345
b=1245
join -v 1 <(echo "$a" | grep -o .) <(echo "$b" | grep -o .)