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

Bash 如何用shell脚本的参数替换文件中的特定行?,bash,shell,unix,sed,Bash,Shell,Unix,Sed,我想使用可配置参数替换文本文档中的特定行。文本文档示例: DialogUpdateTags, DialogProductNotFound { width: 1000; height: 166; } 在上面的示例中,我想专门编辑第4行“1000”,这样脚本就不会编辑其他可能也是1000的宽度值。到目前为止,我有: echo "Enter the desired width size

我想使用可配置参数替换文本文档中的特定行。文本文档示例:

DialogUpdateTags,
DialogProductNotFound
{
    width:                          1000;
    height:                         166;
}
在上面的示例中,我想专门编辑第4行“1000”,这样脚本就不会编辑其他可能也是1000的宽度值。到目前为止,我有:

echo "Enter the desired width size in pixels"
read pixelsize
echo "Width size will be $pixelsize"
之后我需要一个sed命令,有人能帮我吗? 有没有办法只将SEP指向第4行而不编辑其他内容?

使用GNU时:

pixelsize="30"
sed -E "4s/(width: *)[^;]*/\1$pixelsize/" file
输出:

DialogUpdateTags, DialogProductNotFound { width: 30; height: 166; } DialogUpdateTags, DialogProductNotFound { 宽度:30; 身高:166; } 如果要“就地”编辑文件,请使用GNU sed的sed选项
-i

pixelsize="30"
sed -E "4s/(width: *)[^;]*/\1$pixelsize/" file
width="30"
path=textfile.txt
sed -i "4s/1000;/$width;/" "$path"
输出:

DialogUpdateTags, DialogProductNotFound { width: 30; height: 166; } DialogUpdateTags, DialogProductNotFound { 宽度:30; 身高:166; }
如果您想“就地”编辑您的文件,请使用sed的选项
-i

您的意思是像
sed“4s/[^]*;/$pixelsize;/”filename
?或
sed-i的s/^\(\s*宽度:\s*\)[0-9][0-9]*$/\1'$pixelsize';/'文件
?或者您可以双引号引用,
sed-i“s/^\(\s*宽度:\s*\)[0-9][0-9]*;$/\1$pixelsize;/“文件”
只要没有其他
“width:number;”
行,就可以了。对不起,StackOverflow不是这样工作的。形式为“我想做X,请给我提示和/或示例代码”的问题被认为是离题的。请访问并阅读,尤其是阅读,最重要的是,一个简单的搜索会弹出以下帖子:,那一行是唯一的,还是文件的其他行也可能匹配
宽度:\s+1000?如果行是不同的,这很容易,但是如果你必须将它上下文化,这意味着类似循环和状态变量。你的意思是像
sed“4s/[^]*;/$pixelsize;/”filename
?或
sed-i的s/^\(\s*宽度:\s*)[0-9][0-9]*$/\1'$pixelsize';/'文件
?或者您可以双引号引用,
sed-i“s/^\(\s*宽度:\s*\)[0-9][0-9]*;$/\1$pixelsize;/“文件”
只要没有其他
“width:number;”
行,就可以了。对不起,StackOverflow不是这样工作的。形式为“我想做X,请给我提示和/或示例代码”的问题被认为是离题的。请访问并阅读,尤其是阅读,最重要的是,一个简单的搜索会弹出以下帖子:,那一行是唯一的,还是文件的其他行也可能匹配
宽度:\s+1000?如果这一行是不同的,那就很容易了,但是如果你必须将它上下文化,这意味着类似循环和状态变量的东西。太好了,非常感谢你,塞勒斯先生!s/前面的数字是指向行号的数字!明白了,太好了,非常感谢你,塞勒斯先生!s/前面的数字是指向行号的数字!知道了。
width="30"
path=textfile.txt
sed -i "4s/1000;/$width;/" "$path"