Kitty 终端和 sed 命令:如何转义复杂字符串中的字符?

问题描述 投票:0回答:1

我想自动化一些代码,并且我希望当我在 KITTY 上执行 bash 脚本时,再分成 2 个窗格。

我用下一个代码做到了这一点:

cd ~/projects/Project1 && ng s -o &

kitty @ launch sh -c "cd ~/projects/Project2 && npm run dev"
kitty @ launch sh -c "cd ~/projects/Project && npm run dev"

然后我想更复杂一点并更改文件的连接字符串。 我的连接字符串如下所示:

Server=.\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;

我想用这样的东西替换它:

Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword/*-432;MultipleActiveResultSets=true;Encrypt=false;

我用

sed
编写了这段代码并且有效。如果我直接放入终端(它正在替换线路)

sed -i 's/Server=\.\\\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;/Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword\/*-432;MultipleActiveResultSets=true;Encrypt=false;/g' ~/projects/Project1/appsettings.json

我的问题是,当我尝试与 Kitty 一起使用时,我发送了所有命令,但无法使其正常工作。像这样的东西:

kitty @ launch sh -c "sed -i 's/Server=\.\\\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;/Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword\/*-432;MultipleActiveResultSets=true;Encrypt=false;/g' ~/projects/Project1/appsettings.json && cd ~/projects/primereact && npm run dev" 

有什么帮助吗? 最终目标是执行脚本并在分成 3 个的同一终端中打开,但在其中一个终端中替换连接字符串。

我希望能说清楚,谢谢您的时间!

linux bash sed terminal kitty
1个回答
0
投票

听起来这就是您想要做的:

输入示例:

$ cat file
Server=.\\SQLEXPRESS; must change
Server=x\\SQLEXPRESS; must not change

预期输出:

$ sed 's/\.\\\\SQLEXPRESS/CHANGED/' file
Server=CHANGED; must change
Server=x\\SQLEXPRESS; must not change

失败:

$ sh -c "sed 's/\.\\\\SQLEXPRESS/CHANGED/' file"
Server=.\\SQLEXPRESS; must change
Server=x\\SQLEXPRESS; must not change

通过1:

$ sh -c "sed 's/\\.\\\\\\\\SQLEXPRESS/CHANGED/' file"
Server=CHANGED; must change
Server=x\\SQLEXPRESS; must not change

通过2:

$ sh -c "sed 's/[.][\\][\\]SQLEXPRESS/CHANGED/' file"
Server=CHANGED; must change
Server=x\\SQLEXPRESS; must not change

当添加像

[...]
这样的调用额外层时,您只需将引号加倍或将它们放在括号表达式中
sh -c
即可添加额外的脚本解释过程。

现在问题已经清楚了,这就是您最初要求做的事情(没有“kitty launch”的东西):

$ cat file
Server=.\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;

$ sh -c "sed 's/Server=[.][\\][\\]SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;/Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword\/*-432;MultipleActiveResultSets=true;Encrypt=false;/g' file"
Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword/*-432;MultipleActiveResultSets=true;Encrypt=false;
© www.soinside.com 2019 - 2024. All rights reserved.