当前位置:  开发笔记 > 编程语言 > 正文

Bash中的字符串差异

如何解决《Bash中的字符串差异》经验,为你挑选了4个好方法。

我正试图找到一种方法来确定我脚本中两个字符串之间的区别.我可以通过diff或comm轻松地做到这一点,但我不处理文件,我不想将它们输出到文件,进行比较并将其读回.

我看到comm,diff,cmp都允许传递两个文件或文件和标准输入 - 我想如果我不想输出两个文件那就好......但它仍然有点糟糕.

一直在思考我可以使用grep或正则表达式 - 但我猜不是.



1> Ian Kelling..:

使用diffcom或任何你想要的:

diff  <(echo "$string1" ) <(echo "$string2")

Greg的Bash FAQ:流程替换

或者使用命名管道

mkfifo ./p
diff - p <<< "$string1" & echo "$string2" > p

Greg的Bash FAQ:使用命名管道

命名管道也称为FIFO.

-自身为标准输入.

<<< 是一个"这里的字符串".

&就像是;把它放在后台


+1正确答案.+1用于解释符号.此外,Greg的Bash FAQ已转移到:http://mywiki.wooledge.org/上述页面的链接现在位于http://mywiki.wooledge.org/ProcessSubstitution和http://mywiki.wooledge.org/ BashFAQ/085

2> VonC..:

让我想起这个问题:如何在Bash中区分两个管道?

如果你正在进行bash会话,你可以做一个:

diff 

<创建匿名命名管道-由bash的管理-让他们创建并自动销毁,不像临时文件.

因此,如果你设法将两个不同的字符串作为命令的一部分(grep,awk,sed,...)隔离,你可以做 - 例如 - 类似于:

diff < grep string1 myFile < grep string2 myFile

(如果你认为你的文件行中有string1=very_complicated_value和a string2=another_long_and_complicated_value':不知道文件的内部格式,我不能推荐一个精确的命令)



3> Johannes Sch..:

我更喜欢cmp和bash的处理替换功能:

$ cmp -bl <(echo -n abcda) <(echo -n aqcde)
  2 142 b    161 q
  5 141 a    145 e

在位置2上说,ab表示第一个,而aq表示第二个.在第5位,另一个差异正在发生.只需用变量替换这些字符串,就完成了.



4> Pithikos..:

假设你有三个字符串

a="this is a line"
b="this is"
c="a line"

从a中删除前缀b

echo ${a#"$b"}  # a line

从a中删除后缀c

echo ${a%"$c"}  # this is


我想这是做这件事的狂欢方式.它工作得很好.但是这种语法有点难以掌握.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有