将 2 行添加到一个太大而无法打开的文件的替代方法

Alternate ways to add 2 lines to a file too large for me to open

我有一个 JSON 文件太大,Notepad++ 无法打开。有人告诉我写字板会打开它,但它只是挂起。

文件需要在文件开头的新行上有一个左括号 [,在文件末尾的新行上有一个右括号 ]

我已经使用 sed 在此文件的每一行末尾放置了逗号,使用的是我在此处找到的命令。但是,我对 sed 和正则表达式的了解还不够多,无法为括号编写自己的正则表达式,而且我不想把它搞砸。

我还发现了这个用于在文件开头添加两行的 Perl 命令:

perl -pi -e '$.=0 if eof;print "first line\nsecond line\n" if ($.==1)' *.txt

我不明白它在说什么。能不能调成开头1结尾1?如果你能解释一下,我将不胜感激。

如果您的磁盘 space 足以容纳两个相同大小的文件,您可以使用一个简单的 bash 脚本:

echo "[" > corrected-file.txt
cat original-file.txt >> corrected-file.txt
echo "]" >> corrected-file.txt

$.=0 if eof

如果同时处理多个文件,这会重置行计数器 $.

print "first line\nsecond line\n" if $. == 1

如果计数器设置为 1,即脚本正在读取第一行,则输出您要添加的两行。

因此,将其调整为前置 [ 并附加 ] 将是

perl -i~ -pe '$. = 0, $_ .= /\n/ ? "]\n" : "\n]\n" if eof; print "[\n" if 1 == $.;' *.txt

解释:

$_ .= /\n/ ? "]\n" : "\n]\n" if eof

在文件末尾,我们要添加 ]。但是,该文件可以以换行符结尾,也可以不以换行符结尾。如果有换行符,我们就加上]\n,如果没有,我们也需要加上它。

使用 sed:

sed -i -e '1i[' -e '$a]' filename

也就是

1 i [   # before the first line, insert a line "["
$ a ]   # after the last line, append a line "]"

在记事本中创建两个文件,一个只有[,命名为beginning,另一个有],命名为end。然后使用 cat.

cat beginning yourawfullybigfile end > yournewfilewithbothbracketsinit

你也可以使用免费的 emeditor,如果文件足够小,就可以像在 notepad++ 中一样编辑你的大文件

您在 Windows。按照,创建两个文件。然后使用 copy

C:\> copy /b beginning + yourfile + end newfile