【问题标题】:Diff two files and print output of nth line above it too in unix在 unix 中区分两个文件并打印其上方第 n 行的输出
【发布时间】:2018-01-10 18:28:19
【问题描述】:

我们有两个文件,我想在其中比较并打印该行和位于该差异行上方的第 4 行。 例如,在这种情况下,差异在具有 debug:ON/OFF 的行之间,我也想打印值为“AR1LogHandler.properties”的行。

文件 1 ----

<configuration-file name="**AR1LogHandler.properties**">                                                                                     
<parameters>                                                                                                       
<parameter name-path="system.severity" 
value="fatal:yes;error:yes;information:yes;**warning:yes;debug:yes**" 
sticky="true" exists="true"/>                                                                                                
</parameters>                                                                                   
</configuration-file>

文件 2 ---

<configuration-file name="**AR1LogHandler.properties**">                                                                                       
<parameters>                                                                                                        
<parameter name-path="system.severity" 
 value="fatal:yes;error:yes;information:yes;**warning:no;debug:no**" 
 sticky="true" exists="true"/>                                                                                                
</parameters>                                                                                        
</configuration-file>

【问题讨论】:

  • 喜欢diff -uNb -B4 file1 file2? (或-B3,如果您正在寻找...fatal... 行)
  • 请解释你想要什么。我认为当在参数名称路径中找到差异时,您想要上面的第 3 行。当&lt;parameters&gt; 块中有更多 块时,你想要什么?你想上一行跟configuration-file上面有什么区别吗?

标签: shell unix diff aix


【解决方案1】:

您可以使用 difftailsed 的黑客组合来仅选择第一行和更改的行,例如

$ diff -uNb -B3 df1 df2 | tail -n +4 > tmp && \
  sed '0,/^[ ]/!d' tmp && \
  sed '/^[^-+]/d' tmp && rm tmp
 <configuration-file name="**AR1LogHandler.properties**">
-value="fatal:yes;error:yes;information:yes;**warning:yes;debug:yes**"
+value="fatal:yes;error:yes;information:yes;**warning:no;debug:no**"

不漂亮,但保留了显示属性的第一行,然后是文件中的更改。

【讨论】:

  • 感谢您的回复。抱歉,我之前没有通知我需要在 AIX 机器上做。并且 Nb 选项在 AIX 中不起作用。
猜你喜欢
  • 2011-10-22
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2015-04-08
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
相关资源
最近更新 更多