2010-07-11 4 views
2

Учитывая эти две строки:Bash разница сценарий Поиск между двумя строками

"12345" 
"1245" 

Если первый из них является полная строка, а второй есть вещи, пропавшие из первых, я хочу, чтобы вернуть «3».

Так снова:

"The ball is red" 
"The is red" 

Я хочу, чтобы вернуть "мяч"

Я попытался дифф с:

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

Но дифф не дает желаемых результатов , comm тоже не делает того, что я хочу.

ответ

3

Я думаю, что 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

Используя только один исполнимый:

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

Использование join и grep на струнах без пробелов:

a=12345 
b=1245 
join -v 1 <(echo "$a" | grep -o .) <(echo "$b" | grep -o .) 
Смежные вопросы