我正试图找到一种方法来确定我脚本中两个字符串之间的区别.我可以通过diff或comm轻松地做到这一点,但我不处理文件,我不想将它们输出到文件,进行比较并将其读回.
我看到comm,diff,cmp都允许传递两个文件或文件和标准输入 - 我想如果我不想输出两个文件那就好......但它仍然有点糟糕.
一直在思考我可以使用grep或正则表达式 - 但我猜不是.
使用diff
或com
或任何你想要的:
diff <(echo "$string1" ) <(echo "$string2")
Greg的Bash FAQ:流程替换
或者使用命名管道
mkfifo ./p diff - p <<< "$string1" & echo "$string2" > p
Greg的Bash FAQ:使用命名管道
命名管道也称为FIFO.
在-
自身为标准输入.
<<<
是一个"这里的字符串".
&
就像是;
把它放在后台
让我想起这个问题:如何在Bash中区分两个管道?
如果你正在进行bash会话,你可以做一个:
diff与
<
创建匿名命名管道-由bash的管理-让他们创建并自动销毁,不像临时文件.因此,如果你设法将两个不同的字符串作为命令的一部分(grep,awk,sed,...)隔离,你可以做 - 例如 - 类似于:
diff < grep string1 myFile < grep string2 myFile(如果你认为你的文件行中有
string1=very_complicated_value
和astring2=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
我想这是做这件事的狂欢方式.它工作得很好.但是这种语法有点难以掌握.