我有一个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?
例如,如果我有以下变量:
var="/Users/Documents/name/file"
Run Code Online (Sandbox Code Playgroud)
我想把它传递给sed:
sed "s/$var/replace/g" "$file"
Run Code Online (Sandbox Code Playgroud)
但是我得到错误.我该如何规避这个问题?
我使用下面的代码替换shell脚本中的字符串.
echo $LINE | sed -e 's/12345678/"$replace"/g'
Run Code Online (Sandbox Code Playgroud)
但它正在被替换$replace而不是该变量的值.
谁有人说出了什么问题?
尝试使用带有该行的bash脚本中的sed更改文本文件中的值,
sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
Run Code Online (Sandbox Code Playgroud)
这将是一个for循环.不知道为什么它不起作用.有什么建议?
我有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) 我有一个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中的'/'?
还有其他方法我应该完全这样做吗?
相当肯定我错过了一些明显的东西!
$ 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来搜索和替换/文本文件中包含该字符的字符串/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命令来搜索和替换文本文件中的另一行没有问题,并且该行没有/字符.
这是我发现的没有意义的东西.
产量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命令中有两个不同的分隔符似乎很奇怪.
错误或功能?
我们通常会看到人们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)