bash - 为什么我的 sed 命令不能使用双引号?
问题描述
我正在使用以下命令删除文件中匹配之前的所有文本:
sed -n '/sweet/,$p' file
它工作得很好,但我需要将 'sweet' 更改为一个变量,因为它是一个变量,我假设我需要使用双引号而不是单引号,但是当我运行这个命令时:
sed -n "/$variable/,$p" file
我收到以下错误:
sed: -e expression #1, char 11: unexpected `,'
我怎样才能使这个命令工作?
解决方案
单引号告诉 shell 根本不执行任何扩展并sed
获取三个参数-n
,/sweet/,$p
和file
.
使用双引号时,变量会被扩展。假定variable=sweet
且未p
设置,第二次sed
调用得到以下三个参数:-n
、/sweet/,
和file
. 后面没有任何内容的地址说明符,
无效,并给出了您所看到的错误。
如果您想$
在单个参数中混合(文字)和变量扩展,您几乎没有选择:
"/$variable/,\$p"
这逃脱了$
"/$variable/"',$p'
或类似的单引号和双引号字符串部分的组合,以$
根据需要在其每个段中处理。
推荐阅读
- greenplum - 如何确定Greenplum中每个主机/节点的段数
- javascript - 如何在 javascript 上使用 AWS Signature v4
- matlab - 如何提取像素值对应于(x,y)坐标表示的二维图像点?
- jquery - 如何摆脱 emberjs 中的 SourceMapConcat 构建错误?
- haskell - 在 Haskell 中读取大型二进制文件的最快方法是什么?
- c# - 在 Owin 中间件中覆盖响应正文
- javascript - 替换两个数组之间不同的项目
- asp.net-core - 如何将社交登录与现有的 .Net 核心 Web API 后端和 Angular SPA 前端与有效的 OpenIddict 用户/密码和不记名令牌集成
- batch-file - 批处理脚本输出到文本文件部分重复
- javascript - 当组件使用 JavaScript 而不是 TypeScript [Angular] 时,component.html 404 Not Found