无法使用 sed 替换一行
Unable to replace a line using sed
我有一个包含以下行的文件-
[arakoon_scaler_thresholds]
checker_loop_time = 3600
我想用下面一行替换上面两行 -
[arakoon_scaler_thresholds]
checker_loop_time = 60
我正在使用以下命令,但没有发生任何变化。
sed -i "s/arakoon_scaler_thresholds\nchecker_loop_time = 3600/arakoon_scaler_thresholds\nchecker_loop_time = 60/g" file.ini
注意 有多个名称为 checker_loop_time
的参数,我只想更改 [arakoon_scaler_thresholds]
部分下的那个 checker_loop_time
试试这个,一旦成功,使用 -i
选项进行就地编辑
$ cat ip.txt
checker_loop_time = 5463
[arakoon_scaler_thresholds]
checker_loop_time = 3600
checker_loop_time = 766
$ sed -E '/arakoon_scaler_thresholds/{N;s/(checker_loop_time\s*=\s*)3600/0/}' ip.txt
checker_loop_time = 5463
[arakoon_scaler_thresholds]
checker_loop_time = 60
checker_loop_time = 766
这将搜索 arakoon_scaler_thresholds
,然后使用 N
获取下一行,然后执行所需的搜索和替换
您也可以使用awk
$ awk 'p ~ /arakoon_scaler_thresholds/{sub("checker_loop_time = 3600","checker_loop_time = 60")} {p=[=11=]}1' ip.txt
checker_loop_time = 5463
[arakoon_scaler_thresholds]
checker_loop_time = 60
checker_loop_time = 766
前一行保存在变量中
我有一个包含以下行的文件-
[arakoon_scaler_thresholds]
checker_loop_time = 3600
我想用下面一行替换上面两行 -
[arakoon_scaler_thresholds]
checker_loop_time = 60
我正在使用以下命令,但没有发生任何变化。
sed -i "s/arakoon_scaler_thresholds\nchecker_loop_time = 3600/arakoon_scaler_thresholds\nchecker_loop_time = 60/g" file.ini
注意 有多个名称为 checker_loop_time
的参数,我只想更改 [arakoon_scaler_thresholds]
部分下的那个 checker_loop_time
试试这个,一旦成功,使用 -i
选项进行就地编辑
$ cat ip.txt
checker_loop_time = 5463
[arakoon_scaler_thresholds]
checker_loop_time = 3600
checker_loop_time = 766
$ sed -E '/arakoon_scaler_thresholds/{N;s/(checker_loop_time\s*=\s*)3600/0/}' ip.txt
checker_loop_time = 5463
[arakoon_scaler_thresholds]
checker_loop_time = 60
checker_loop_time = 766
这将搜索 arakoon_scaler_thresholds
,然后使用 N
获取下一行,然后执行所需的搜索和替换
您也可以使用awk
$ awk 'p ~ /arakoon_scaler_thresholds/{sub("checker_loop_time = 3600","checker_loop_time = 60")} {p=[=11=]}1' ip.txt
checker_loop_time = 5463
[arakoon_scaler_thresholds]
checker_loop_time = 60
checker_loop_time = 766
前一行保存在变量中