如何在文本文件中按行号替换特定行?

Geo*_*F67 5 linux

我的linux盒子上有一个2GB的文本文件,我正试图导入我的数据库.

我遇到的问题是处理此rdf文件的脚本在一行上窒息:

mismatched tag at line 25462599, column 2, byte 1455502679:
<link r:resource="http://www.epuron.de/"/>
<link r:resource="http://www.oekoworld.com/"/>
</Topic>
=^
Run Code Online (Sandbox Code Playgroud)

我想替换</Topic></Line>.我不能在所有行上搜索/替换,但我确实有行号,所以我希望有一些简单的方法来用新文本替换那一行.

有什么想法/建议吗?

cha*_*aos 11

sed -i yourfile.xml -e '25462599s!</Topic>!</Line>!'
Run Code Online (Sandbox Code Playgroud)


Dav*_*d Z 8

sed -i '25462599 s|</Topic>|</Line>|' nameoffile.txt
Run Code Online (Sandbox Code Playgroud)


Jör*_*tag 6

调用Unix中编辑文本文件的工具ed(相反sed,顾名思义就是流编辑器).

ed曾经被用作交互式编辑器,但它也可以轻松编写脚本.方法ed是,所有命令都采用地址参数.解决特定行的方法只是行号,更改寻址行的方法是s命令,它采用相同的正则表达式sed.所以,要改变第42行,你会写出类似的东西42s/old/new/.

这是整个命令:

FILENAME=/path/to/whereever
LINENUMBER=25462599

ed -- "${FILENAME}" <<-HERE
    ${LINENUMBER}s!</Topic>!</Line>!
    w
    q
HERE
Run Code Online (Sandbox Code Playgroud)

这样做的优点ed是标准化,而-i标志sed是一个专有的GNU扩展,在许多系统上都不可用.