Bash 如何使用sed替换给定行的第一列(未知浮点),然后用空格填充到第n个字符
我有一个文件,我希望通过脚本使用sed(或awk或类似工具)进行编辑 文件内容示例:Bash 如何使用sed替换给定行的第一列(未知浮点),然后用空格填充到第n个字符,bash,replace,sed,padding,Bash,Replace,Sed,Padding,我有一个文件,我希望通过脚本使用sed(或awk或类似工具)进行编辑 文件内容示例: 362.4318 str1 uag tj -19.275620800 string2 (blah) uag tt 367. randomtext uag tu 0.05699651698647584 blab*blah(something) ua
362.4318 str1 uag tj
-19.275620800 string2 (blah) uag tt
367. randomtext uag tu
0.05699651698647584 blab*blah(something) uag tv
.008306 la*la(word) uag tw
54 la*la(word) uag tx
我有一个关联数组,其中包含要编辑的行号,还有一个包含要插入的新值。我基本上可以使用以下命令进行替换(尽管对于示例中的第6行,此操作失败,因为没有小数):
此外,字符串的未更改部分(第2列及以上)应始终从第26个字符开始(如果新值需要超过24个字符,则应在后面),即使它最初位于第26个字符的左侧。我读过一些关于填充的内容,但我不理解语法
非常感谢您的建议 您可以使用:
sed -i -r "${rowArray[$key]}s|^\s*-?[0-9.]+|${valueArray[$key]}|" file
或
也可以是0-9
[:数字:
[:blank://code>也可以仅为
\t
然而,有些人可能会说eval是邪恶的
${rowArray[$key]}
和${valueArray[$key]}
的值是多少?不是答案,但这个链接可能会帮助您使用填充语法-我发现它非常有用:@konsolebox例如,${rowArray[$key]}=4和${valueArray[$key]}=0。04793620056@user3719139好啊我的解决方案怎么样?@ValdarMoridin谢谢你的链接。这是我一直在想的参考资料之一。我最近自学成才,所以我永远不知道我所误解的是基本的还是复杂的:)快速分析让我相信这对替换有效,但不做任何填充。@user3719139您可以使用printf
来做填充,例如printf-v paddedValue“%”“${valueArray[$key]}”
并使用$paddedValue
作为替换表单。我建议将$paddedValue
格式化为在其后面包含空格,这样您可以统一替换列,而不影响其后列的对齐,并将^\s*-?[0-9.]+
更改为^\s*-?[0-9.]+\s*
,这样您也可以替换它后面的空格。我喜欢它!我来试试,把垫子钉上!太好了@用户3719139好的。如果您认为答案是您的解决方案,请接受。谢谢:)尚未使用eval。我会调查的。为什么是邪恶?:)
sed -i -r "${rowArray[$key]}s|^\s*-?[0-9.]+|${valueArray[$key]}|" file
sed -i "${rowArray[$key]}s|^[[:blank:]]*-\?[0-9.]\+|${valueArray[$key]}|" file
printf -v paddedValue '%24s ' "${valueArray[$key]}"
sed -i -r "${rowArray[$key]}s|^\s*-?[0-9.]+\s*|$paddedValue|" file
eval sed -i $'${rowArray[$key]}s/\S*/${valueArray[$key]}/' $file