如何在空文件或非文件的开头添加行?
How to add lines at the beginning of either empty or not file?
我想在文件开头添加行,适用于:
sed -i '1s/^/#INFO\tFORMAT\tunknown\n/' file
sed -i '1s/^/##phasing=none\n/' file
但是当我的文件为空时它不起作用。我找到了这些命令:
echo > file && sed '1s/^/#INFO\tFORMAT\tunknown\n/' -i file
echo > file && sed '1s/^/##phasing=none\n/' -i file
但最后一个擦除第一个(如果文件不为空)
我想知道在文件是否为空的情况下如何在文件开头添加行
我尝试了 if [ -s file ]
的循环但没有成功
谢谢!
您应该在 sed
中使用 i
命令:
file='inputFile'
# insert a line break if file is empty
[[ ! -s $file ]] && echo > "$file"
sed -i.bak $'1i\
#INFO\tFORMAT\tunknown
' "$file"
或者您可以放弃 sed
并在 shell 中使用 printf
:
{ printf '#INFO\tFORMAT\tunknown\n'; cat file; } > file.new &&
mv file.new file
您可以使用插入命令(i
)。
if [ -s file ]; then
sed -i '1i\
#INFO\tFORMAT\tunknown\
##phasing=none' file
else
printf '#INFO\tFORMAT\tunknown\n##phasing=none' > file
fi
请注意,选项卡的 \t
不是 POSIX,并且不适用于所有 sed 实现(例如,BSD/Apple、-i
的工作方式也不同)。您可以改用原始制表符或变量:tab=$(printf '\t')
.
明确创建一个新文件,然后移动它:
#!/bin/bash
echo -e '#INFO\tFORMAT\tunknown' | cat - file > file.new
mv file.new file
或者将文件的全部内容写入内存:
#!/bin/bash
printf '#INFO\tFORMAT\tunknown\n%s' "$(<file)" > file
使用普通 bash 和 shell 实用程序:
#!/bin/bash
header=(
$'#INFO\tFORMAT\tunknown'
$'##phasing=none'
)
mv file file.bak &&
{ printf '%s\n' "${header[@]}"; cat file.bak; } > file &&
rm file.bak
如果 available/acceptable.
ed
很简单
printf '%s\n' '0a' $'#INFO\tFORMAT\tunknown' $'##phasing=none' . ,p w | ed -s file
- 如果文件不存在,它甚至会创建文件。
我想在文件开头添加行,适用于:
sed -i '1s/^/#INFO\tFORMAT\tunknown\n/' file
sed -i '1s/^/##phasing=none\n/' file
但是当我的文件为空时它不起作用。我找到了这些命令:
echo > file && sed '1s/^/#INFO\tFORMAT\tunknown\n/' -i file
echo > file && sed '1s/^/##phasing=none\n/' -i file
但最后一个擦除第一个(如果文件不为空)
我想知道在文件是否为空的情况下如何在文件开头添加行
我尝试了 if [ -s file ]
的循环但没有成功
谢谢!
您应该在 sed
中使用 i
命令:
file='inputFile'
# insert a line break if file is empty
[[ ! -s $file ]] && echo > "$file"
sed -i.bak $'1i\
#INFO\tFORMAT\tunknown
' "$file"
或者您可以放弃 sed
并在 shell 中使用 printf
:
{ printf '#INFO\tFORMAT\tunknown\n'; cat file; } > file.new &&
mv file.new file
您可以使用插入命令(i
)。
if [ -s file ]; then
sed -i '1i\
#INFO\tFORMAT\tunknown\
##phasing=none' file
else
printf '#INFO\tFORMAT\tunknown\n##phasing=none' > file
fi
请注意,选项卡的 \t
不是 POSIX,并且不适用于所有 sed 实现(例如,BSD/Apple、-i
的工作方式也不同)。您可以改用原始制表符或变量:tab=$(printf '\t')
.
明确创建一个新文件,然后移动它:
#!/bin/bash
echo -e '#INFO\tFORMAT\tunknown' | cat - file > file.new
mv file.new file
或者将文件的全部内容写入内存:
#!/bin/bash
printf '#INFO\tFORMAT\tunknown\n%s' "$(<file)" > file
使用普通 bash 和 shell 实用程序:
#!/bin/bash
header=(
$'#INFO\tFORMAT\tunknown'
$'##phasing=none'
)
mv file file.bak &&
{ printf '%s\n' "${header[@]}"; cat file.bak; } > file &&
rm file.bak
如果 available/acceptable.
ed
很简单
printf '%s\n' '0a' $'#INFO\tFORMAT\tunknown' $'##phasing=none' . ,p w | ed -s file
- 如果文件不存在,它甚至会创建文件。