Shell 当通过文件外壳划线循环时,ed不工作 #/bin/bash filename='url.txt' old_url=“测试” 读行时 做 新建url=$line echo“新URL为”$New\u URL echo-e“%s/”“$new_url”/“$old_url””/g\nw“| ed ca-sample.conf 旧url=$new\u url 回声“” echo“旧URL为”$Old\u URL 睡60 完成

Shell 当通过文件外壳划线循环时,ed不工作 #/bin/bash filename='url.txt' old_url=“测试” 读行时 做 新建url=$line echo“新URL为”$New\u URL echo-e“%s/”“$new_url”/“$old_url””/g\nw“| ed ca-sample.conf 旧url=$new\u url 回声“” echo“旧URL为”$Old\u URL 睡60 完成,shell,sed,ed,Shell,Sed,Ed,我在url.txt中循环,一行一行地阅读,用新的url替换旧的url。 此命令(echo-e“%s/”“$new_url”“/”$old_url”/g\nw'| ed ca sample.conf)在中工作正常 命令行(我已将新url和旧url设置为环境变量“export new\u url=“new”和“export old_url=“old”)但当我将此命令放入While循环时,它不起作用。在循环中重复编辑文件效率极低。你可能想要像这样的东西 #!/bin/bash filename='ur

我在url.txt中循环,一行一行地阅读,用新的url替换旧的url。 此命令(echo-e“%s/”“$new_url”“/”$old_url”/g\nw'| ed ca sample.conf)在中工作正常 命令行(我已将新url和旧url设置为环境变量“export new\u url=“new”和“export
old_url=“old”)但当我将此命令放入While循环时,它不起作用。

在循环中重复编辑文件效率极低。你可能想要像这样的东西

#!/bin/bash
filename='urls.txt'
old_url="test"
while read line
do
  new_url=$line
  echo "New URL  is "$new_url
  echo -e '%s/'"$new_url"'/'"$old_url"'/g\nw' |ed ca-sample.conf
  old_url=$new_url
  echo ""
  echo "Old URL  is "$old_url
  sleep 60
done < $filename
exit
您的
sed
可能不接受标准输入的脚本;可能将生成的脚本存储在一个临时文件中,并传递该文件,而不是
-

我加入了
tac
,这样新的URL不会立即被更新的URL替换。根据您的数据的外观和您实际试图完成的内容,这可能是完全错误的,并且/或者需要额外的调整(例如,正则表达式锚?)


冗长的打印和长时间的
睡眠
似乎与其说是有益的,不如说是分心的,尽管我想如果你真的想的话,你可以把它们重新破解。还要注意引号——您引用的是文字文本(不需要引号),并将变量保留在引号外(这正是引号内最重要的内容,因为引号是有用的)。

现在请在命令行中使用
export new\u url=”进行尝试http://some_real_url/with_some_real_path"
顺便说一句,使用echo中的管道代替管道可以使ed脚本更具可读性。@KamilCuk当我在中给出真实url时,它在命令行中不起作用。我不熟悉shell脚本。这个命令实际上做什么?您能帮我一下吗?@Master,请在您的帖子中告诉我们样本输入和样本预期输出,这将为我们提供您需求的清晰图片。
awk -v old_url="test" '{ print "s%" old_url "%" $0 "%g"; old_url = $0 }' urls.txt |
tac |
sed -i~ - ca-sample.conf