Bash 脚本中的 sed 问题

moa*_*a_u 2 command-line bash sed

我在使用sed命令时遇到问题。我正在尝试编写一个执行以下操作的 bash 脚本:

  1. 搜索包含的行 :@
  2. 然后保存包含的行:@并将其替换为新行

如下所示:

#! /bin/bash

echo "Please enter the ip address of you file"
read ipnumber
find=`grep ':@' application.properties` # find the line
input="connection.url=jdbc\racle\:thin\:@$ipnumber\:1521\:billz" # preparing new line
echo `sed "s/'${find}'/'${input}'/g" application.properties` # replace old with new line
Run Code Online (Sandbox Code Playgroud)

问题是:什么也没有发生。

我已经尝试使用"${find}" 而不是'${find}'

gei*_*rha 6

该片段有几个问题。我建议您在编写脚本之前更好地学习 bash 的语法。

不管怎样,如果你想编辑一个文件,你需要一个文件编辑器。sed 不是文件编辑器。我相信这会做你想做的。

#!/bin/bash

read -p "Enter the ip address: " ipnumber

ed -s application.properties << EOF
/:@/c
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz
.
w
EOF
Run Code Online (Sandbox Code Playgroud)

那是什么ed脚本说的是:/:@/c-含有第一线:@ç焊割用下面的一切,直到仅包含一个行的行.。然后ww ^礼器更改该文件。

请参阅http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed以获取使用 ed 进行编辑的帮助,并查看http://mywiki.wooledge.org/BashGuide以了解 bash。

更新:
sed 可以用来实现相同的,但它不能编辑文件,它只能用于创建一个新文件。

# POSIX
sed "/:@/c\
connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties
Run Code Online (Sandbox Code Playgroud)

这里 sed 将输出应用了更改的文件。您可以重定向到一个新文件,然后将该文件移到旧文件上。GNU sed 还有一个非标准-i选项,可以透明地完成最后一部分。GNU sed 也不要求您在 sed 脚本中有该换行符。

# GNU sed
sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ipnumber:1521:billz" application.properties
Run Code Online (Sandbox Code Playgroud)

请注意,ed 将仅替换与正则表达式匹配的第一行,而 sed 将替换与该正则表达式匹配的所有行。