【问题标题】:sed is not working when I use variables当我使用变量时 sed 不起作用
【发布时间】:2013-10-10 03:25:18
【问题描述】:

如果我不使用变量,这将有效。我不明白为什么当我将变量放入其中时它不起作用。任何人都可以帮忙吗?变量包含文件的路径。

sed s/$old/$new/ Current_series_list.txt"

【问题讨论】:

标签: bash sed


【解决方案1】:

路径可能包含正斜杠。使用不同的字符来分隔命令参数,例如#:

sed "s#$old#$new#" Current_series_list.txt

当然,由于正则表达式元字符,这仍然很脆弱。考虑改用以下内容:

ruby -e '$stdin.each_line { |l| puts l.sub(ARGV[0], ARGV[1]) }' \
     "$old" "$new" < Current_series_list.txt

Perl 中更便携的等价物留给读者练习。

【讨论】:

  • 谢谢,我可以将结果 bach 发送到与
  • 使用sed -i 进行就地编辑。不,您不能(轻松地)使用重定向来同时读取和写入文件;当然,输入重定向在这里不是正确的工具。
  • @user2764736 sponge(1) 在这里应该很有用。将| sponge Current_series_list.txt 附加到命令中。
  • perl -e '($o,$n)=@ARGV;while(){s/$o/$n/;print}' "$old" "$new"
【解决方案2】:

oldnew 的值是多少?如果它们包含斜杠,那么它们会将 sed 模式扩展为无效的内容。您的尾随引号可能也没有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2020-09-29
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多