这篇文章可以回答以下问题
话题相关
#linux 向空文件中插入空行
#sed 不能向空文件中插入内容
#sed 不能处理空文件
#linux 向空文件中插入内容
#什么是空文件
#把文件做成空文件
#shell代码,做一个指定空行数文件
首先,什么是空文件。
空文件即文件大小为0的文件。
比如用touch file.txt
的touch
命令新建的文件,就是空文件。
文件大小可以通过ll
命令来查看。
用echo命令 向空文件中插入空行
echo -e > file.txt
其中,-e
是echo命令的一个参数,表示改行。
这个命令可以做一个有一行空行的文件file.txt。
即使file.txt本身是一个空文件,这个命令也将其变成一个有一行空行的文件。
>
将指定内容替代文件内容,
>>
将指定内容添加到文件最后。
# 多次执行可以增加空行的行数
echo -e >> file.txt
sed 不能向空文件中插入空行
先来看一下sed的定义。(不用仔细看,只需看到它是stream editor就好了)。
sed is a
stream editor
. A stream editor is used to performbasic text transformations
on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed ), sed works by making only one pass over the input(s), and is consequently more efficient.
来源:https://www.gnu.org/software/sed/manual/sed.html
什么是stream
呢?
A stream is a sequence of bytes.
stream是一系列的字节。
sed
是stream editor,用来编辑stream,处理基本的文本处理等。因为空文件
是0字节,也就没有stream,sed自然也不能处理空文件。
向空文件中插入内容
用echo
命令直接写入即可
## 写入内容(文件全文变为写入的内容)
echo 'test' > file.txt
## 写到在文件最后
echo 'test' >> file.txt
sed只能处理非空文件,关于sed插入文本,可以参考这篇文章,
文章链接sed 插入文本 。
shell代码: 插入指定空行数
应用场景是,向一个文件内插入内容,如果文件中没有指定的行号,将导致插入失败。比如文件只有10行,要将内容插入到15行的场景。
#!/bin/bash
set -euo pipefail
# 指定要做成的文件名
file=line_test.txt
# 指定空行数
line_cnt=5
# 适用于本代码,每次执行清空文件以保证文件行数是指定行数
cat /dev/null > $file
n=0
while [ $n -lt $line_cnt ]; do
echo -e >> $file
n=$((n+1))
done
echo "$n empty lines have been inserted in $file."
其中涉及,把一个文件做成空文件的知识点。
# 把文件做成空文件
cat /dev/null > file.txt
(以上。)