bash - 使用单引号时,Vim 替换在命令行模式下没有正确发生
问题描述
我有一个数据 init=6'b000000; 的文件 test.txt;我想用 init=6'b110111; 替换它 通过在 bash 文件中使用 vim 脚本。我收到错误
我正在使用以下命令:
vim -c '%s/init=6'b000000;/init=6'b110111;/g | write | quit' test.txt
这在 vim 中完美运行,而不是在 bash 中。
解决方案
这与 无关Vim
,您不能在一对其他单引号中嵌入单引号。shell 在将命令行参数传递给调用的命令之前对其进行解析,它只是无法以您定义的方式处理内部单引号。
在传递给命令之前,需要保留里面的文字单引号。所以使用双引号并转义内引号
vim -c "%s/init=6\'b000000;/init=6\'b110111;/g | write | quit" file
或使用单引号,但在里面包含多级双引号
vim -c '%s/init=6'"\'"'b000000;/init=6'"\'"'b110111;/g | write | quit' file
推荐阅读
- html - 在另一个页面上链接和使用特定的 html 标记
- presto - 我在 Athena 上的嵌套选择语句出现问题(无法解析列)
- wordpress - woocommerce 产品 - 缺少产品 ID、缺少品牌名称和缺少谷歌搜索控制台的可用性
- docker - docker run 和 docker pull 有什么区别
- python-3.x - 为什么我在运行我的程序时不断收到 AttributeError: 'str' object has no attribute 'Student'
- javascript - 如何在 Windows 上使用单个 NPM 命令运行多个 NPM 命令
- python - 少单与守序相结合
- c# - FluentValidation 在错误的视图模型上使用验证器
- python - TypeError:传递了稀疏矩阵,但需要密集数据(多标签 K 最近邻)
- vba - 在插入之前检查列的值,如果存在移动到 Access 表单中的下一个字段?