我的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)
调用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扩展,在许多系统上都不可用.