0
#!/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

我正在遍历 urls.txt 以逐一阅读这些行,以用新的 url 替换旧的 url。此命令 (echo -e '%s/'"$new_url"'/'"$old_url"'/g\nw' |ed ca-sample.conf) 在命令行中运行良好(我已设置 new_url 和 old_url作为环境变量 "export new_url="New" 和 "export old_url="Old") 但是当我把这个命令放在 While 循环中时它不起作用。

4

1 回答 1

0

在循环中反复编辑文件是非常低效的。你可能想要类似的东西

awk -v old_url="test" '{ print "s%" old_url "%" $0 "%g"; old_url = $0 }' urls.txt |
tac |
sed -i~ - ca-sample.conf

sed可能不接受标准输入的脚本;也许将生成的脚本存储在一个临时文件中并传递它而不是-.

我输入了,tac这样新的 URL 就不会立即被更新的 URL 替换。根据您的数据的外观以及您实际尝试完成的工作,这可能是完全错误的,和/或需要额外的调整(一方面是正则表达式锚点?)

冗长的打印和冗长的打印sleep似乎比有用更让人分心,但我想如果你真的想的话,你可以把它们改回来。还要注意引用——您引用的是文字文本(不需要引用)并将变量留在引号之外(这正是引号的关键,因为引号完全有用)。

于 2019-10-22T07:49:38.783 回答