首页 > 解决方案 > 删除 txt 文件的前 n 行时,Bash 在行首附加空格

问题描述

观察结果

在编写从文件中删除变量 nrn行的函数时,输出文件在每行的第一个位置(第一行之后)有一个额外的空间。

例如:

some text
another text
third text
fourth text
fifth text

去:

third text
 fourth text
 fifth text

删除第一n=2行后。

预期结果

本质上,我打算/期望不添加这些额外的空间:

third text
fourth text
fifth text

代码

执行删除的功能包括:

#!/bin/bash
apt_update() {
    source src/hardcoded_variables.txt

    # copy target file
    cp $INPUT_PATH $REMAINING_LINES_IN_TARGET_AFTER_STARTING_LINE

    # get starting line number
    starting_line=$(<$STARTING_LINE_QUERY_VAR_PATH)
    
    # remove first starting_line lines from the copied target file
    echo -n $(sed "1,${starting_line}d" $REMAINING_LINES_IN_TARGET_AFTER_STARTING_LINE) > $REMAINING_LINES_IN_TARGET_AFTER_STARTING_LINE
}
apt_update "$@"

问题

如何防止在输出文件的第一行之后的每行开头添加空格?

标签: bashsed

解决方案


答案是由肖恩作为评论给出的,我使用了一种sed导致错误的复杂方法。此外,我首先制作了一个文件的副本,并尝试应用sed到同一个文件。当我第一次制作副本,然后从原始文件传输到复制文件时,目标文件按预期填充。因此,找到了一个可行的解决方案:

#!/bin/bash
apt_update() {
    source src/hardcoded_variables.txt

    # copy target file
    cp $INPUT_PATH $REMAINING_LINES_IN_TARGET_AFTER_STARTING_LINE

    # get starting line number
    starting_line=$(<$STARTING_LINE_QUERY_VAR_PATH)
    
    # remove first starting_line lines from the copied target file
    sed "1,${starting_line}d" $INPUT_PATH > $REMAINING_LINES_IN_TARGET_AFTER_STARTING_LINE
}
apt_update "$@"

sed在应用此解决方案之前,我确实需要制作目标副本。


推荐阅读