UNIX替换文件中的特定行

时间:2010-12-02 01:56:09

标签: file unix replace command

我的文件大小约为5.5GB。我想查看文件的特定行。让我们说行号100001,我想用我自己的文本替换该行。如何使用Unix命令实现此操作。我无法在编辑器中查看该文件。我无法打开,这是一台远程机器。

任何人都可以分享一些想法来查看该行并将其替换为其他文本吗?

谢谢:)

1 个答案:

答案 0 :(得分:1)

如果您想要就地修改该行,并且替换数据的长度与替换文本的长度相同,则可以使用dd(小心!)覆盖文件的一部分。

# getting the byte offsets of the start and length of the line
perl -ne '$s+=length; if ($.==100001) {print "$s + ",length,"\n"; exit}' bigfile

# writing over the existing data
echo 'new line' | dd of=bigfile bs=1 seek=$start count=$length conv=notrunc

如果替换数据的长度不同,并且它不在文件的最后,则您别无选择,只能重写该文件。这需要有足够的磁盘空间来保留bigfile和它的副本!

# The old file is renamed to bigfile.bak; a new bigfile is written with changes.
sed -i.bak -e '100001 c \
new line' bigfile