【问题标题】:Bash script Find difference between two stringsBash脚本查找两个字符串之间的差异
【发布时间】:2010-07-12 02:22:32
【问题描述】:

给定这两个字符串:

"12345"
"1245"

第一个是完整的字符串,第二个是第一个缺少的东西,我希望它返回“3”。

再说一遍:

"The ball is red"
"The is red"

我要回“球”

我尝试过 diff:

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

但是 diff 没有给出想要的输出。 comm 也不符合我的要求。

【问题讨论】:

    标签: bash


    【解决方案1】:

    我认为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)
    

    【讨论】:

    • 一般情况下需要排序。如comm -23 &lt;(tr ' ' $'\n' &lt;&lt;&lt; $a | sort) &lt;(tr ' ' $'\n' &lt;&lt;&lt; $b | sort)
    • 除了@SidaZhou 的添加之外,如果句子顺序相反,它可能需要-13 而不是-23。 comm --help 描述得很清楚。
    【解决方案2】:

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

    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 .)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多