Bashstring差异

我试图find一种方法来确定我的脚本中的两个string之间的差异。 我可以很容易地做到这一点与差异或通信,但我不处理文件,我宁愿不输出到文件,做比较,并阅读回来。

我看到comm,diff,cmp都允许传递两个文件或一个文件和标准input – 我想这很好,如果我不想输出两个文件…但它仍然有点烂。

一直在思考我可以使用grep或正则expression式 – 但我猜不是。

提前致谢,

使用diffcom或任何你想要的:

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

格雷格的狂欢常见问题: stream程替代

或使用命名pipe道

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

格雷格的狂欢常见问题: 使用命名pipe道

命名pipe道也被称为FIFO。

-本身就是标准input。

<<<是“这里的string”。

&就像; 但把它放在后台

我更喜欢cmp和Process Substitutionfunction:

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

在位置2上说,ab是第一个,而第二个是aq。 在位置5处,另一个区别正在发生。 只要用variablesreplace这些string,就完成了。

让我想起这个问题: 你如何区分Bash中的两条pipe道?

如果你正在打麻将,你可以做一个:

 diff <cmd1 <cmd2 diff <(foo | bar) <(baz | quux) 

<创build匿名命名pipe道 – 由bashpipe理 – 所以它们是自动创build和销毁,不像临时文件。

所以,如果你设法把你的两个不同的string作为一个命令的一部分(grep,awk,sed,…),你可以这样做,比如:

 diff < grep string1 myFile < grep string2 myFile 

(如果你假设你在你的文件行中有string1=very_complicated_valuestring2=another_long_and_complicated_value' :不知道文件的内部格式,我不能推荐一个精确的命令)

假设你有三个string

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

从a中删除前缀b

 echo ${a#"$b"} 

从a删除后缀c

 echo ${a%"$c"}