当我期望的状态存在时,我想更改文件中的单元格。示例:
文件:
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 是唯一的。
由于id
s 是唯一的,因此使用第一个字段作为键是有意义的:
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
:请先在不使用开关的情况下进行测试。