如何用shell脚本替换文本文件中的特定行?

时间:2017-02-14 06:10:59

标签: linux perl shell

我正在尝试用我的shell脚本替换txt文件中的特定行,例如;

cat aa.txt:
auditd=0
bladeServerSlot=0

当我运行我的脚本时,我想更改" bladeServerSlot"如下12;

cat aa.txt:
auditd=0
bladeServerSlot=12

你能帮我吗?

3 个答案:

答案 0 :(得分:2)

perl -pe 's/bladeServerSlot=\K\d+/12/' aa.txt  > output.txt

\Kparticular formpositive lookbehind,它会丢弃之前的所有匹配项。所以我们只需要替换下面的内容。 s/默认应用于$_,其中包含当前行。 -p为每一行打印$_,因此会复制所有其他行。我们将输出重定向到文件。

答案 1 :(得分:0)

使用sed和反向引用:

sed -r '/bladeServerSlot/ s/(^.*)(=.*)/\1=12/g' inputfile

使用awk,这将搜索包含bladeServerSlot的行并替换该行的第二列。

awk  'BEGIN{FS=OFS="="}/bladeServerSlot/{$2=12}1' inputfile

答案 2 :(得分:-1)

是否真的有必要更换示例中的行?由于bladeServerSlot是一个变量,您可以重置该值。

bladeServerSlot=`any command`

或者你可以让这个变量由提供给这个脚本的参数填充。

bladeServerSlot=$1

$1是您脚本的第一个参数。我认为这将是一个更清洁的方式解决你的问题,而不是在这里做花哨的正则表达式。 sed / perl解决方案可行,但对于阅读脚本的其他人来说,它们并不十分清楚。