首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Sed没有在变量中扩展*

sed 是一个流编辑器,用于对输入流(文件或管道)进行基本的文本转换。在 sed 中,* 是一个正则表达式元字符,表示前面的字符或组出现零次或多次。然而,当你在 sed 的替换命令中使用变量时,* 不会被自动扩展为文件名通配符,而是被视为普通字符。

如果你想在 sed 命令中使用变量,并且该变量包含 * 字符,你需要确保 * 被正确解释为通配符。这通常涉及到使用双引号而不是单引号来包围变量和表达式,因为双引号允许 shell 对通配符进行扩展。

例如,如果你有一个变量 $files 包含 *.txt,并且你想使用 sed 来编辑所有 .txt 文件,你可以这样做:

代码语言:txt
复制
files="*.txt"
sed -i 's/foo/bar/g' "$files"

在这个例子中,"$files" 使用双引号来确保 shell 将 * 扩展为当前目录下所有 .txt 文件的列表。

如果你遇到 sed 没有在变量中扩展 * 的问题,可能是因为以下原因:

  1. 变量被单引号包围,这阻止了 shell 对 * 进行通配符扩展。
  2. 变量中没有实际的 * 字符,或者 * 字符被错误地放置。

解决这个问题的方法是确保变量被双引号包围,并且 * 字符确实存在于变量中。如果你需要在脚本中动态构建包含通配符的变量,你可以使用 eval 命令来强制 shell 执行通配符扩展:

代码语言:txt
复制
files="*.txt"
eval "sed -i 's/foo/bar/g' $files"

请注意,使用 eval 可能会带来安全风险,因为它会执行字符串中的任何代码。因此,在使用 eval 时要格外小心,确保你信任变量的内容。

如果你在使用 sed 时遇到具体的错误或问题,请提供更多的上下文信息,以便我能提供更具体的帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券