如何将 sdiff 的输出分成三个文件

如何将 sdiff 的输出分成三个文件

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

相关内容