对特定行使用 sed 命令

Jo *_*erd 5 linux script bash sed

当我想要的状态存在时,我想更改文件中的单元格。例子:

文件:

id311    vmName1    state0
id312    vmName2    state0
id313    vmName3    state0
Run Code Online (Sandbox Code Playgroud)

我将键入一个脚本,该脚本仅更改一行的状态列。所以如果我输入sed -i 's/state0/state1/g'all state0's be state1。我只想更改一行的状态,例如:

文件:

id311    vmName1    state0
id312    vmName2    state1
id313    vmName3    state0 
Run Code Online (Sandbox Code Playgroud)

如何将sed命令用于带有 use id 的特殊行?注意:id 是唯一的。

fed*_*qui 6

只需在之前添加行号:sed '<line number>s/<search pattern>/<replacement string>/

$ sed '1s/state0/XXXX/' file
id311    vmName1    XXXX
id312    vmName2    state0
id313    vmName3    state0
Run Code Online (Sandbox Code Playgroud)

由于您想就地编辑,请说:

sed -i.bak '1s/state0/XXXX/' file
Run Code Online (Sandbox Code Playgroud)

注意我.bak-i标志之后使用。这将file自行执行更改,但也会创建一个file.bak包含file更改前当前内容的备份文件。


对于可变行号,通常使用变量,以及双引号来扩展它:

sed -i.bak "${lineNumber}s/state0/XXXX/" file
Run Code Online (Sandbox Code Playgroud)