我需要将输出分成 三个文件。修改的内容存放在,追加的内容存放在,删除的内容存放在。这种分隔应基于符号“ ”(竖线)、“ ”(大于)和“ ”(小于)。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 次。