![如何将 sdiff 的输出分成三个文件](https://linux22.com/image/219916/%E5%A6%82%E4%BD%95%E5%B0%86%20sdiff%20%E7%9A%84%E8%BE%93%E5%87%BA%E5%88%86%E6%88%90%E4%B8%89%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我需要将输出分成 三个文件。修改的内容存放在,追加的内容存放在,删除的内容存放在。这种分隔应基于符号“ ”(竖线)、“ ”(大于)和“ ”(小于)。sdiff -s file1 file2
Changedfound.txt
Append.txt
Delete.txt
|
>
<
我该怎么做?
答案1
您可以使用tee
子 shell 来执行此操作。如果你有这样的数据:
$ cat file1
0
1
2
3
$ cat file2
1
2
3 4
5
$ sdiff -s file1 file2
0 <
3 | 3 4
> 5
您可以通过管道进入tee
,并在运行类似以下内容的子shell中匹配它sed
:
$ sdiff -s file1 file2 | \
tee >(sed -ne 's/\s*<$//p' > Delete.txt) | \
tee >(sed -ne 's/^\s*>\s//p' > Append.txt ) | \
tee >(sed -ne 's/^.*\s|\s//p' > ChangedFound.txt)
$ cat Delete.txt
0
$ cat Append.txt
5
$ cat ChangedFound.txt
3 4
PS. 有一个更好的方法可以做到这一点awk
,因此您不必将每一行解析 3 次。