我正在学习 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
但从输出中,您可以看到“sed”并未替换第二次出现的世界“line”。那么,我在这里犯了什么错误吗?
答案1
s/../../2
替换每行中的第二次出现。
如果您将文件读取为一线:
使用 GNU sed
:
sed -z 's/line/LINUX/2' mytextfile
正常情况下sed
:
tr '\n' '\0' < mytextfile | sed 's/line/LINUX/2' | tr '\0' '\n'
请注意,这会产生不正确的结果高度不太可能情况下该文件已经包含 null 字节。
要替换第二行的第一次出现,请参阅其他答案:-)
答案2
在您的文件中,第二次出现在第二行,因此您需要的是:
sed '2s/line/LINUX/' mytextfile
要就地编辑文件:
sed -i '2s/line/LINUX/' mytextfile
是2s
在第二行进行更改。仅当字符串line
在一行或多行中出现多次时,您的命令才有效。
答案3
对于行解析,您应该在命令“s”之前提及行号
$ echo "this is line 1
this is line 2
this is line 3
this is line 4
this is line 5" | sed -e '2s/line/LINUX/'
this is line 1
this is LINUX 2
this is line 3
this is line 4
this is line 5
所以,对你来说命令是:
sed -e '2s/line/LINUX/' mytextfile
是的,如果无论行号如何,如果您只想替换整个文件中的第二次出现,pLumo 的答案是正确的。
sed -z 's/line/LINUX/2' mytextfile