首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有sed的文件中查找和替换字符串

如何在没有sed的文件中查找和替换字符串
EN

Stack Overflow用户
提问于 2022-05-19 09:05:01
回答 1查看 417关注 0票数 0

这是为我的安装回购,我使用在新的linux安装和公司提供的macbooks。我有个makefile目标:

代码语言:javascript
复制
omz-theme:
    sed -i 's/ZSH_THEME=".*"/ZSH_THEME="$(THEME)"/g' $(HOME)/.zshrc

这在linux上运行得很好,但在macs上却不起作用,因为它们使用的是BSD的sed。我需要一些方法来查找和替换我的.zshrc中将运行的文本,而不管系统如何。几乎所有在线资源都只指向sed。

编辑:这就是它在mac上“崩溃”的方式。如果我执行brew install gnu-sed并将目标更改为使用gsed,则不会发生

代码语言:javascript
复制
sed: 1: "/Users/username/.zshrc": unterminated substitute pattern
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-20 18:42:04

您也可以使用awk查找和替换。这是一个包含更多细节的资源。

例如,可以将makefile命令替换为:

代码语言:javascript
复制
omz-theme:
    awk -v var="ZSH_THEME=$(echo THEME)" '{sub(/^ZSH_THEME=.*$/, var); print}' $(HOME)/.zshrc

您可以使用它来重写现有的$(HOME)/.zshrc文件,使用重定向:

代码语言:javascript
复制
omz-theme:
    awk -v var="ZSH_THEME=$(echo THEME)" '{sub(/^ZSH_THEME=.*$/, var); print}' $(HOME)/.zshrc > $(HOME)/.zshrc

或者,您可以使用检查操作系统使用 OSTYPE,然后对BSD和GNU使用正确的sed语法:

代码语言:javascript
复制
omz-theme:
    if [[ "$OSTYPE" == "linux-gnu"* ]]; then 
        sed -i 's/ZSH_THEME=".*"/ZSH_THEME="$(THEME)"/g' $(HOME)/.zshrc
    else
        sed -i '' 's/ZSH_THEME=".*"/ZSH_THEME="$(THEME)"/g' $(HOME)/.zshrc
    fi

(注:我没有测试上面的内容,但你明白了)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72301652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档