使用 sed 替换第 n 次出现的单词

Sal*_*med 1 sed

我正在学习 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' 的第二次出现。那么,我在这里犯了什么错误吗?

Nas*_*ley 5

在您的文件中,第二次出现在第二行,因此您需要的是:

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在一行或多行中出现多次时,您的命令才有效。

  • OP 要求*替换第二次出现*,而不是第二行的第一次出现。 (2认同)

pLu*_*umo 5

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 行的第一次出现,请参阅其他答案:-)