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"