"echo" 可以在写入文件时停止跳过一行吗
Can "echo" stop skipping a line when writing to a file
我正在尝试使用 echo 命令编辑文件,但是当我这样做时
echo "hello" >> file.txt
它正在跳过一行。它打印文件如下:
banana
apple
hello
我不确定这是来自 echo 还是文件以“\n”结尾,但我想在其余文本下方写下:
banana
apple
hello
编辑:我现在明白这不是 echo 的错。该文件可能以“\n”结尾。反正有绕过这个吗?我可以删除这个“\n”或者选择我想在哪一行写吗?
我找到了将 sed
命令与 wc -l file.txt
一起使用的方法
命令
wc -l file.txt
returns file.txt 的行数(在我的示例中它在 echo 之前有 2 个)。
我们可以使用命令选择哪一行来写我们的文本:
sed -i '2ihello' file.txt
它会给我们:
banana
hello
apple
得到我想要的可以这样做:
echo "aux" >> file.txt
sed -i "3iHello" file.txt
sed '4d' file.txt
最后一个命令删除第 4 行文件然后变成:
banana
apple
Hello
这是另一个 sed
脚本,它没有 hard-code 任何行号。
sed -i '' '${;s/^$/Hello/;t
i\
Hello
}' file.txt
这里有一个简短的分类:
${
- 大括号中的操作应该只应用于最后一行(地址表达式 $
)
s/^$/Hello/
- 如果此行为空,请将其替换为 Hello
t
- 如果发生替换,我们就完成了(分支到脚本结尾)
i\Hello
- 在新行插入 Hello
(也就是说,如果我们没有在前一行分支)
}
- 大括号结束
这是在 MacOS 上测试的;其他 Unix 上的语法可能会略有不同。 (特别是,在 Linux 上,-i
选项不需要参数。除此之外,该脚本在 Debian 上也是如此。一些换行符可能会被删除,但它仍然会工作,但这些在 *BSD sed
.)
上是必需的
我正在尝试使用 echo 命令编辑文件,但是当我这样做时
echo "hello" >> file.txt
它正在跳过一行。它打印文件如下:
banana
apple
hello
我不确定这是来自 echo 还是文件以“\n”结尾,但我想在其余文本下方写下:
banana
apple
hello
编辑:我现在明白这不是 echo 的错。该文件可能以“\n”结尾。反正有绕过这个吗?我可以删除这个“\n”或者选择我想在哪一行写吗?
我找到了将 sed
命令与 wc -l file.txt
命令
wc -l file.txt
returns file.txt 的行数(在我的示例中它在 echo 之前有 2 个)。 我们可以使用命令选择哪一行来写我们的文本:
sed -i '2ihello' file.txt
它会给我们:
banana
hello
apple
得到我想要的可以这样做:
echo "aux" >> file.txt
sed -i "3iHello" file.txt
sed '4d' file.txt
最后一个命令删除第 4 行文件然后变成:
banana
apple
Hello
这是另一个 sed
脚本,它没有 hard-code 任何行号。
sed -i '' '${;s/^$/Hello/;t
i\
Hello
}' file.txt
这里有一个简短的分类:
${
- 大括号中的操作应该只应用于最后一行(地址表达式$
)s/^$/Hello/
- 如果此行为空,请将其替换为Hello
t
- 如果发生替换,我们就完成了(分支到脚本结尾)i\Hello
- 在新行插入Hello
(也就是说,如果我们没有在前一行分支)}
- 大括号结束
这是在 MacOS 上测试的;其他 Unix 上的语法可能会略有不同。 (特别是,在 Linux 上,-i
选项不需要参数。除此之外,该脚本在 Debian 上也是如此。一些换行符可能会被删除,但它仍然会工作,但这些在 *BSD sed
.)