【问题标题】:remove "empty" lines from a text file shell script从文本文件 shell 脚本中删除“空”行
【发布时间】:2015-11-18 00:43:04
【问题描述】:

我有一组输出文件,其中一些如下:

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
135 0.00048 
136 0.0039  experience darren  
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director

我想得到以下文件:

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
136 0.0039  experience darren  
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director

如果第二列之后没有任何内容,则只想删除该特定行。我怎么能做到这一点我对 shell 脚本很陌生?

可能是对这个命令的修改? sed '/^$/d'

【问题讨论】:

    标签: linux shell text-processing blank-line


    【解决方案1】:

    如果列是用空格分隔的,那么检查行是否有两个以上的字段呢?由于NF 存储了这个值,你可以简单地说:

    awk 'NF>2' file
    

    对于给定的输入,它会返回:

    133 0.00295 nurse merit respect muslim 
    134 0.00292 high dangerous reassure full 
    136 0.0039  experience darren  
    137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
    138 0.00292 find director
    

    【讨论】:

      【解决方案2】:

      只是为了好玩,我使用sed 作为 OP 开始,并保持详细的解决方案格式,以防在选择要删除的行时可能会影响日志文件的确切布局。在这里,正则表达式查找行首,后跟 0 个或多个数字,后跟一个空格,后跟零个或多个数字,后跟一个文字句点,后跟零个或多个数字,零个或多个空格,然后是结尾该行并删除它们。

      sed '/^[0-9]* [0-9]*\.[0-9]* *$/d' x.log > x_modded.log
      

      有趣的是,在我在 Ubuntu 上的 bash 版本中,我无法将 \d 的简写用于数字,而将加号用于一个或多个数字。看来是时候进行一些更新了。 :-/

      【讨论】:

        猜你喜欢
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多