这是针对mac osx终端的
说我有一个文件让我们说
file.txt的
This is a file
and it has some contents.
我需要一个命令将其更改为:
file.txt的
(new line character inserted)
This is a file
and it has some contents
答案 0 :(得分:3)
您可以在osx上使用ed
:
printf '%s\n' 0a "" . w | ed -s file
答案 1 :(得分:2)
这可以完全在bash中完成,无需使用sed
或cat
等外部工具。
printf '\n%s' "$(< file.txt)"
请注意,这会将修改后的输出打印到“stdout”。它还会删除输入文件中的所有尾随换行符。如果这是一个问题,那么您将回到cat
...
( printf '\n'; cat file.txt )
哎呀,如果你要重复使用它,你可以把它变成一个功能:
prepend_newline() {
printf '\n'; cat "$1"
}
如果要替换原始文件,可以使用临时文件和一些包装器:
tmpf=$(mktemp fileXXXX)
trap "rm -f $tmpf" 0
printf '\n%s' "$(< file.txt)" > $tmpf &&
mv $tmpf file.txt
当然,这也否定了“没有外部工具”的好处,因为mktemp
,rm
和mv
没有内置到bash中。
更便携的基于sed的解决方案可能如下所示:
sed -i.bak $'1s/^/\\\n/' file.txt
上述解决方案不是依赖于sed能够扩展\n
,而是使用bash“格式扩展”来添加换行符,其中包含适用于其他sed变体的方法。
正如评论中所建议的那样,-i
并不普遍,只是普遍存在。如果您的sed不包含-i
,请参阅上面的包装。
答案 2 :(得分:1)
最简单的方法是使用两个命令:
{ printf '\n'; cat input.txt; } > tmp.txt && mv tmp.txt input.txt
效率略低,但在所有极端情况下都是正确的。
答案 3 :(得分:0)
使用sed
内联注入会这样做:
sed -i '1s/^/\n/' file.txt
答案 4 :(得分:0)
用于添加空行的简单ed
命令看起来像
1i # insert before line 1
# blank line to insert
. # end of insert
w # write the file
这可以用Bash命令写成
ed -s "$file" <<<$'1i\n\n.\nw'
答案 5 :(得分:-2)
echo -e "\n$(cat file.txt)" > file.txt
然而,正如@EricRenouf所说,如果文件中还有其他转义序列,它们将被扩展。