使用 sed 命令指定特定行

使用 sed 命令指定特定行

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

文件:

id311    vmName1    state0
id312    vmName2    state0
id313    vmName3    state0

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

文件:

id311    vmName1    state0
id312    vmName2    state1
id313    vmName3    state0 

如何使用sed带有 id 的特殊线路命令?注意:id 是唯一的。

答案1

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

$ sed '1s/state0/XXXX/' file
id311    vmName1    XXXX
id312    vmName2    state0
id313    vmName3    state0

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

sed -i.bak '1s/state0/XXXX/' file

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


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

sed -i.bak "${lineNumber}s/state0/XXXX/" file

答案2

如何使用sed带有 id 的特殊线路命令?注意:id 是唯一的。

由于ids 是唯一的,因此使用第一个字段作为键是有意义的:

sed -i '/id312/s/state0/state1/' file

您可能想要创建一个命令,并将 ID 号和文件作为参数传递:

#!/usr/bin/env bash
sed -i "/id$1/s/state0/state1/" $2

像这样调用它:

./sed.sh 312 file

笔记:使用开关时务必小心-i:请先在不使用开关的情况下进行测试。

相关内容