相关疑难解决方法(0)

如何用sed替换包含斜杠的字符串?

我有一个Visual Studio项目,它是在本地开发的.必须将代码文件部署到远程服务器.唯一的问题是URLsthey包含硬编码.

项目包含URL,例如?page = one.要使链接在服务器上有效,它必须是/ page/one.

我决定在部署之前用sed替换我的代码文件中的所有URL,但是我坚持使用斜杠.

我知道这不是一个漂亮的解决方案,但它很简单会省去很多时间.我必须替换的字符串总数小于10.必须检查的文件总数约为30.

描述我的情况的示例如下:

我正在使用的命令:

sed -f replace.txt < a.txt > b.txt
Run Code Online (Sandbox Code Playgroud)

replace.txt包含所有字符串:

s/?page=one&/pageone/g
s/?page=two&/pagetwo/g
s/?page=three&/pagethree/g
Run Code Online (Sandbox Code Playgroud)

A.TXT:

?page=one&
?page=two&
?page=three&
Run Code Online (Sandbox Code Playgroud)

运行sed命令后b.txt的内容:

pageone
pagetwo
pagethree
Run Code Online (Sandbox Code Playgroud)

我希望b.txt包含:

/page/one
/page/two
/page/three
Run Code Online (Sandbox Code Playgroud)

sed

132
推荐指数
5
解决办法
16万
查看次数

如何将包含斜杠的变量传递给sed

如何将包含斜杠的变量作为模式传递给sed

例如,如果我有以下变量:

var="/Users/Documents/name/file"
Run Code Online (Sandbox Code Playgroud)

我想把它传递给sed:

sed "s/$var/replace/g" "$file"
Run Code Online (Sandbox Code Playgroud)

但是我得到错误.我该如何规避这个问题?

bash sed

88
推荐指数
6
解决办法
6万
查看次数

使用变量替换shell脚本中的字符串

我使用下面的代码替换shell脚本中的字符串.

echo $LINE | sed -e 's/12345678/"$replace"/g'
Run Code Online (Sandbox Code Playgroud)

但它正在被替换$replace而不是该变量的值.

谁有人说出了什么问题?

unix shell sed

81
推荐指数
7
解决办法
38万
查看次数

用bash变量替换sed

尝试使用带有该行的bash脚本中的sed更改文本文件中的值,

sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
Run Code Online (Sandbox Code Playgroud)

这将是一个for循环.不知道为什么它不起作用.有什么建议?

bash sed substitution

52
推荐指数
3
解决办法
6万
查看次数

如何在sed命令中使用变量?

我有abc.sh:

exec $ROOT/Subsystem/xyz.sh
Run Code Online (Sandbox Code Playgroud)

在Unix机器上,如果我打印,echo $HOME那么我得到/HOME/COM/FILE.

我想更换$ROOT$HOME使用sed的.

预期产出:

exec /HOME/COM/FILE/Subsystem/xyz.sh
Run Code Online (Sandbox Code Playgroud)

我试过了,但我没有得到预期的输出:

sed  's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1
Run Code Online (Sandbox Code Playgroud)

加成:

如果我有 abc.sh

exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Run Code Online (Sandbox Code Playgroud)

然后用

sed "s|\$INSTALLROOT/|${INSTALLROOT}|" abc.sh
Run Code Online (Sandbox Code Playgroud)

它只是首先替换$ROOT,即输出即将到来

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Run Code Online (Sandbox Code Playgroud)

unix sed

52
推荐指数
2
解决办法
11万
查看次数

如何用sed中的另一个路径替换路径?

我有一个csh脚本(虽然我可以更改语言,如果它有任何相关性)我必须:

sed s/AAA/BBB/ file
Run Code Online (Sandbox Code Playgroud)

问题是AAA和BBB是路径,因此包含'/'.AAA是固定的,所以我可以说:

sed s/\\\/A\\\/A\\\A/BBB/ file
Run Code Online (Sandbox Code Playgroud)

但是,BBB基于变量,包括$ PWD.如何逃避$ PWD中的'/'?

还有其他方法我应该完全这样做吗?

csh sed path

37
推荐指数
4
解决办法
7万
查看次数

使用Sed的不同分隔符删除

相当肯定我错过了一些明显的东西!

$ cat test.txt
  00 30 * * * /opt/timebomb.sh >> timebomb.log
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
$ sed ':timebomb:d' test.txt
  00 30 * * * /opt/timebomb.sh >> timebomb.log
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
Run Code Online (Sandbox Code Playgroud)

$ sed '/timebomb/d' test.txt
  01 30 * * * /opt/reincarnate.sh >> reincarnation.log
Run Code Online (Sandbox Code Playgroud)

为什么会这样?d命令不支持一组不同的分隔符吗?

sed

25
推荐指数
1
解决办法
8817
查看次数

sed搜索并替换包含/的字符串

我无法弄清楚如何使用sed来搜索和替换/文本文件中包含该字符的字符串/etc/myconfig.

例如,在我现有的文本文件中,我有:

myparam /path/to/a argB=/path/to/B xo
Run Code Online (Sandbox Code Playgroud)

我希望将其替换为:

myparam /path/to/c argB=/path/to/D xo
Run Code Online (Sandbox Code Playgroud)

我尝试在bash中这样做:

line='myparam /path/to/a argB=/path/to/B xo'
line_new='myparam /path/to/c argB=/path/to/D xo'
sed -i 's/$line/$line_new/g' /etc/myconfig
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.

尝试

grep -rn "$line" /etc/myconfig
Run Code Online (Sandbox Code Playgroud)

虽然回来了'myparam /path/to/a argB=/path/to/B xo'.

表达sed执行此搜索并替换并正确处理命令的命令的正确方法是什么/?(我认为/我的字符串中的字符是给我问题的字符,因为我使用类似的sed命令来搜索和替换文本文件中的另一行没有问题,并且该行没有/字符.

bash sed

23
推荐指数
2
解决办法
3万
查看次数

为什么备用分隔符不适用于sed -e'/ pattern/s/a/b /'?

这是我发现的没有意义的东西.

产量cat config.h:

define somevar foo // Sample variable
Run Code Online (Sandbox Code Playgroud)

此版本的命令用于将foo更改为bar并保留注释:

sed -e '/somevar/s/foo/bar/' config.h
Run Code Online (Sandbox Code Playgroud)

这不起作用:

sed -e '|somevar|s|foo|bar|' config.h
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

sed:-e表达式#1,char 1:未知命令:`|'

有趣的是,这确实有效:

sed -e '/somevar/s|foo|bar|' config.h
Run Code Online (Sandbox Code Playgroud)

也许我错过了文档的某些部分.在同一个sed命令中有两个不同的分隔符似乎很奇怪.

错误或功能?

sed

20
推荐指数
3
解决办法
9786
查看次数

你可以在sed中使用哪些分隔符?

我们通常会看到人们unknown option to s'sed想要使用包含sed分隔符的模式时抱怨错误.

例如,如果我们使用/:

$ var="hel/lo"
$ sed "s/a/$var/g" <<< "haha"
sed: -e expression #1, char 9: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)

所以我们建议使用另一个分隔符,例如|:

$ sed "s|a|$var|g" <<< "haha"
hhel/lohhel/lo
Run Code Online (Sandbox Code Playgroud)

不过,我想知道什么是可能的分隔符sed可以接受......因为它似乎是包括正则表达式样的人(几乎所有的字符*,?,.,...)!

在我的sed (GNU sed) 4.2.2:

$ sed 's/a/b/g' <<< "haha"
hbhb
$ sed 's_a_b_g' <<< "haha"
hbhb
$ sed 's#a#b#g' <<< "haha"
hbhb
$ sed 's$a$b$g' <<< "haha"
hbhb
$ sed …
Run Code Online (Sandbox Code Playgroud)

gnu sed delimiter

15
推荐指数
1
解决办法
8280
查看次数

标签 统计

sed ×10

bash ×3

unix ×2

csh ×1

delimiter ×1

gnu ×1

path ×1

shell ×1

substitution ×1