【问题标题】:Removing the new line in the last line of a text file using sed使用 sed 删除文本文件最后一行中的新行
【发布时间】:2021-12-06 20:11:27
【问题描述】:

我想使用 sed 删除文本文件最后一行中的新行。例如输入如下:

1
1
1
1
1
1

我希望在文本文件末尾没有任何新行的输出:

 1
 1
 1
 1
 1
 1

【问题讨论】:

    标签: text sed


    【解决方案1】:

    这可能对你有用(GNU sed):

    sed -z 's/\n\+$//' file
    

    如果没有空字符,这将删除文件末尾的换行符。

    注意sed 的正常使用,即没有 -z 选项将文件吞入内存,将在 sed 命令作用于它们之前删除任何换行符。

    【讨论】:

      【解决方案2】:

      使用sed

      sed '/^$/d' input_file
      

      这将删除所有空行

      【讨论】:

        【解决方案3】:

        从一些测试数据开始:

        $ printf "%s\n" {a..e} "" "" | cat -n
             1  a
             2  b
             3  c
             4  d
             5  e
             6
             7
        

        我会这样处理问题:反转文件,删除空行 在顶部,然后重新反转文件

        $ printf "%s\n" {a..e} "" "" | tac | awk 'NF && !p {p=1}; p' | tac | cat -n
             1  a
             2  b
             3  c
             4  d
             5  e
        

        NF 是“此记录中的字段数”的 awk 变量。 p 是我用来指示何时开始打印的变量。第一次 NF 不为零时,我们将p 变量设置为真值。末尾的独立p 触发默认操作以打印记录。


        删除最后一行的换行符是另一回事。

        鉴于此文件:

        $ cat > file
        first
        second
        third
        $ od -c file
        0000000   f   i   r   s   t  \n   s   e   c   o   n   d  \n   t   h   i
        0000020   r   d  \n
        0000023
        

        我们可以使用 perl:

        $ perl -i -0777 -ne 's/\n+$//; print' file
        
        $ od -c file
        0000000   f   i   r   s   t  \n   s   e   c   o   n   d  \n   t   h   i
        0000020   r   d
        0000022
        

        tr 将换行符转换为其他字符,并使用 sed 删除尾随字符

        $ tr '\n' '\034' < file | sed $'s/\034$//' | tr '\034' '\n' | od -c
        0000000   f   i   r   s   t  \n   s   e   c   o   n   d  \n   t   h   i
        0000020   r   d
        0000022
        

        【讨论】:

        • 感谢您的回答。不,这不会删除文本文件中的最后一个新行,使用这种方法我们仍然在文本文件中有一个新行。我想要将光标移动到文本文件中最后一个数字或字符的右侧,而不是移动到最后一个字符之后的新行。当我们在终端中打印结果时,您的方法和网络中的其他方法正在工作,但是当我们处理文本文件并将结果保存在文本文件中时,这种方法将不起作用。
        • 哦,你的意思是文件中的最后一个字符不应该是换行符。从技术上讲,此文件将不再是“文本文件”(“文本文件”中的每一行都以 EOL 字符结尾)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 2023-03-30
        • 2019-06-08
        相关资源
        最近更新 更多