我正在学习 sed,所以在这种情况下,我试图替换第二次出现的单词“line”。因此,我发出了以下命令:
(zet:pc:~/text) sed 's/line/LINUX/2' mytextfile
this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
Run Code Online (Sandbox Code Playgroud)
但是从输出中,您可以看到 'sed' 并没有替换世界 'line' 的第二次出现。那么,我在这里犯了什么错误吗?
在您的文件中,第二次出现在第二行,因此您需要的是:
sed '2s/line/LINUX/' mytextfile
Run Code Online (Sandbox Code Playgroud)
要就地编辑文件:
sed -i '2s/line/LINUX/' mytextfile
Run Code Online (Sandbox Code Playgroud)
是2s
在第二行进行更改。仅当字符串line
在一行或多行中出现多次时,您的命令才有效。
s/../../2
正在替换每行的第二次出现。
你可以,如果你阅读文件,因为它工作的一个行:
使用 GNU sed
:
sed -z 's/line/LINUX/2' mytextfile
Run Code Online (Sandbox Code Playgroud)
正常sed
:
tr '\n' '\z' < mytextfile | sed 's/line/LINUX/2' | tr '\z' '\n'
Run Code Online (Sandbox Code Playgroud)
要替换第 2 行的第一次出现,请参阅其他答案:-)