arrays - 用 Bash 中数组中的值替换文本
问题描述
我正在尝试用“sed”数组中的值替换单词。问题是数组对于每个文件都有不同的长度,0、1 或 9 个值。替换时,值应以逗号分隔。例如:
array = (one two three)
sed -e "s | value = \" text to replace \ "| value = \" $ {array (*)} \ "| g"
the result should look like this: value = one, two, three
and if array = (one) => value = one
有人能帮助我吗?先感谢您!
解决方案
bash 变量赋值不能有空格=
array=(one two three)
要使用单个角色加入,IFS 是您的朋友:
IFS=,
# .....v.......................................v.............v...v
sed -e 's/value = " text to replace "/value = "'"${array[*]}"'"/g'
# ..............................................^^^^^^^^^^^^^
我的引述是非常刻意的。我已经标记了单引号开始和停止的位置,并且数组扩展必须用双引号引起来。
总的来说,你很接近。必须小心空格,bash 可能对它非常敏感。
IFS
是 shell 的“内部字段分隔符”——它用于
将字符串拆分为字段
line="foo,bar:baz" IFS=':,' read first second third <<<"$line" declare -p first second third
将数组元素连接成单个字符串
set -- a b c d IFS=':,' echo "$*" # _must_ be quoted
推荐阅读
- typescript - 打字稿:部分类型的断言规则
- npm - NestJs 使用外部封装方法的问题
- slurm - 如何使用 srun 绑定请求的物理 CPU
- tsql - T-SQL 嵌套案例语句 - 否则继续嵌套案例
- json - SAS 将 .sas7bat 转换为 JSON
- javascript - 如何仅使用 javascript 代码为菜单项添加 css 类活动?
- python - How do I set the KyyMD application open as a maximized window?
- excel - 循环遍历每个切片器项目并将工作簿保存为文件名等于所选切片器项目的 xls?
- node.js - 我想知道为什么我使用express,axios和cors时会出现不同的错误结果
- android - 如何使用 Hilt 在可组合的内部获取 Viewmodel