小编Bjo*_*orn的帖子

sed 用多行变量替换行

我试图用存储在变量中的多行字符串替换文件中的一行。

打印到屏幕时我能够得到正确的结果,但如果我想进行就地替换则不行。

该文件具有以下形式:

*some code*
*some code*
string_to_replace
*some code*
Run Code Online (Sandbox Code Playgroud)

我希望生成的文件是:

*some code*
*some code*
line number 1
line number 2
line number 3
*some code*
Run Code Online (Sandbox Code Playgroud)

我试过的代码是:

new_string="line number 1\nline number 2\nline number 3"

# Correct output on screen
sed -e s/"string_to_replace"/"${new_string}"/g $file

# Single-line output in file: "line number 1line number 2line number 3"
sed -i s/"string_to_replace"/"${new_string}"/g $file
Run Code Online (Sandbox Code Playgroud)

尝试组合-i-e选项时,结果与仅使用-i.

我在 CentOS 上使用 GNU sed 4.1.5 版(通过 Mac 的 ssh 连接到它)。

bash sed multiline

5
推荐指数
1
解决办法
6778
查看次数

Bash:循环遍历包含模式中的模式的变量

在我的脚本中,我有一个未知数量的变量,包含我想要转换为矢量的角度.我创建了变量名,使得每个'参数'的角度都是以下形式:{parameter} _angle_ {lat/perp}因此,每个参数都有一个'lat'和'perp'角度变量.所以我想要做的是找到包含'_angle_lat'的所有变量,对这些变量的值进行一些计算,并创建一个包含'parameter'-name的新变量.例如:

export M0_angle_lat=4
export M1_angle_lat=70
export M1_angle_perp=8
export M0_angle_perp=90

# Now I want to use these values to calculate vectors
for varname in *_angle_lat
do
    # at first iteration it will get for example "varname=M0_angle_lat" in which case
    # I want it to do:
    M0_X=$(( $M0_angle_lat * $M0_angle_perp ))
    # The second iteration in case would then give "varname=M1_angle_lat" in which case
    # I want it to do:
    M1_X=$(( $M1_angle_lat * $M1_angle_perp ))
done
Run Code Online (Sandbox Code Playgroud)

我希望很清楚我的目标是什么.谢谢您的帮助!

variables bash for-loop

4
推荐指数
1
解决办法
5489
查看次数

重击:导出未正确将变量传递给父

子脚本中导出的变量未定义父脚本(a.sh):

#!/bin/bash
# This is the parent script: a.sh
export var="5e-9"
./b.sh var
export result=$res;  # $res is defined and recognized in b.sh
echo "result = ${result}"
Run Code Online (Sandbox Code Playgroud)

子脚本(b.sh)如下所示:

#!/bin/bash
# This is the child script: b.sh
# This script has to convert exponential notation to SI-notation
var1=$1
value=${!1}
exp=${value#*e}
reduced_val=${value%[eE]*}
if [ $exp -ge -3 ] || [ $exp -lt 0 ]; then SI="m";
elif [ $exp -ge -6 ] || [ $exp -lt -3 ]; …
Run Code Online (Sandbox Code Playgroud)

variables bash parameter-passing

3
推荐指数
1
解决办法
3528
查看次数

标签 统计

bash ×3

variables ×2

for-loop ×1

multiline ×1

parameter-passing ×1

sed ×1