我正在学习 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' 的第二次出现。那么,我在这里犯了什么错误吗?
如何编写 a sed
(或awk
,或两者),它将采用以下内容:
echo '1 aa 2 2 3 bb 5 bb 2 5' | sed/awk ...
Run Code Online (Sandbox Code Playgroud)
并且只替换第n次出现的字符串?例如,第三次出现2
或第二次出现bb
?
因此,预期的输出将是(例如,当替换第二次出现的 时)bb
:replaced
1 aa 2 2 3 bb 5 replaced 2 5
Run Code Online (Sandbox Code Playgroud)
输入字符串、替换字符串,n
可以是任意输入。
我正在寻找sed
像这里这样的解决方案:Print everything after nth delimiter
sed -E 's/^([^\]*[\]){3}//' infile
Run Code Online (Sandbox Code Playgroud)
但要提取第 n 个分隔符之前的文本,而不是像示例中那样提取第 n 个分隔符。适用于所有 sed 变体的东西。并像示例一样对所有行进行操作。
此示例中的分隔符是\
但可以是任何其他分隔符。应该适用于任何版本的 sed。