-6ren">
gpt4 book ai didi

regex - Sed 用新的目录结构替换行 "Linux Directory "

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:36 24 4
gpt4 key购买 nike

所以不确定,但我尝试了以下方法,但没有成功。
我可以使用什么字符串来替换 sed 中的目录字符串?

sed 's"/usr/lib64/$id""/home/user1/$id"/g' 1.php > 1_new.php

最佳答案

由于字符串中包含斜杠,因此在替换表达式中使用不同的分隔符会很方便。在这里,我使用 | 作为分隔符。如果为了简单起见,我们忽略正则表达式中的双引号,我们可以使用:

sed "s|/usr/lib64/$id|/home/user1/$id|g" 1.php > 1_new.php

如果我们包含双引号,那么引用会更复杂:

sed 's|"/usr/lib64/'"$id"'"|"/home/user1/'"$id"'"|g' 1.php > 1_new.php

我假设您打算将 $id 替换为 shell 变量 id 的值。如果是这样,那么在这两种情况下,表达式 $id 不能位于单引号内,这一点很重要,因为它们会抑制变量扩展。

引用讨论

第二种情况下的引用可能看起来很难看。为了帮助解释,我将添加一些空格来分隔字符串的各个部分:

sed 's|"/usr/lib64/' "$id" '"|"/home/user1/' "$id" '"|g' # Don't use this form.

从上面我们可以看到,sed命令由一个单引号字符串's|"/usr/lib64/',后跟一个双引号字符串"$id",再跟一个单引号字符串'"|"/home/user1/',再跟一个双引号字符串"$id",最后是一个单引号组成。带引号的字符串,'"|g'。因为除了我们明确希望 shell 扩展的内容之外,所有内容都用单引号引起来,因此这通常是最安全的方法,可以防止出现意外情况。

替代引用样式

以下引用样式可能看起来更简单:

sed "s|\"/usr/lib64/$id\"|\"/home/user1/$id\"|g" 1.php > 1_new.php

上面的sed命令都是一个双引号字符串。通过将双引号转义为 \",可以将双引号包含在双引号字符串中。只要您确信 shell 不会扩展除您想要扩展的内容之外的任何内容,这种样式就可以。

关于regex - Sed 用新的目录结构替换行 "Linux Directory ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23837206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com