我在制作一个bash脚本时遇到了一些麻烦
这是我正在使用的代码.
cat /crawler/bc_daemon.php | sed "s/PORT2/${PORT}/ig" | sed 's/IP2/IPADDRESS/ig' | \
sed 's/USER2/USER/ig' | sed 's/PASS2/PASSWORD/ig' > bc_daemon.php
cat /crawler/bc_layout.php | sed "s/GITHUB/${REPO}/ig" | sed "s/COINNAME/${NAME}/ig" > bc_layout.php
Run Code Online (Sandbox Code Playgroud)
奇怪的是线条单独从脚本中工作.但是在剧本里面我得到了这个
sed: -e expression #1, char 17: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
当它需要打印变量时,我正在使用''它可以在字面上和""
在我看来,这应该是有效的.但我错过了我的错误
tri*_*eee 11
其中一个值包含斜杠.您需要转义它,或使用不同的分隔符.
此外,您不必要地将一个单独的调用串联在一起.这cat也没用.
sed -e "s@PORT2@${PORT}@ig" \
-e 's/IP2/IPADDRESS/ig' \
-e 's/USER2/USER/ig' \
-e 's/PASS2/PASSWORD/ig' /crawler/bc_daemon.php > bc_daemon.php
Run Code Online (Sandbox Code Playgroud)
不幸的是,并非所有sed方言都兼容.如果您不喜欢多个-e选项,请尝试使用单行换行符分隔sed命令.我在这个语法中提供了第二个脚本作为示例.
sed "s!GITHUB!${REPO}!ig
s!COINNAME!${NAME}!ig" /crawler/bc_layout.php > bc_layout.php
Run Code Online (Sandbox Code Playgroud)
如果您的值可能包含@或者也包含!,则需要选择不同的分隔符.任何非字母数字的ASCII字符都可以,但反斜杠和引号显然有问题.
一种可能的情况是,您使用的i程序可能无法识别sed您别无选择,只能将其删除:
sed "s/GITHUB/${REPO}/g"
Run Code Online (Sandbox Code Playgroud)
(kunwar.sangram建议I可以识别大写字母。)
另一件事是,某些变量可能包含您使用的分隔符s,因此尝试使用另一个分隔符可能会修复它:
sed "s|GITHUB|${REPO}|ig"
Run Code Online (Sandbox Code Playgroud)
把cats 排除在外;他们更快乐地蜷缩在角落里,平静地离开。sed每个管道中的第一个可以读取文件。
您也应该能够将这些单独的sed命令合并为每个管道一个。也就是说,您当前的命令:
cat /crawler/bc_daemon.php |
sed "s/PORT2/${PORT}/ig" |
sed 's/IP2/IPADDRESS/ig' |
sed 's/USER2/USER/ig' |
sed 's/PASS2/PASSWORD/ig' > bc_daemon.php
Run Code Online (Sandbox Code Playgroud)
应该:
sed -e "s/PORT2/${PORT}/ig" \
-e 's/IP2/IPADDRESS/ig' \
-e 's/USER2/USER/ig' \
-e 's/PASS2/PASSWORD/ig' \
/crawler/bc_daemon.php > bc_daemon.php
Run Code Online (Sandbox Code Playgroud)
这忽略与未知选项的问题s///命令,这可能是可能是指i标志。sedLinux 上的 GNU手册页没有列出,但在线GNUsed手册确实列出了i和I作为不区分大小写的选项,所以这应该不是问题。另一种可能性是 的扩展${PORT}包含斜线;这可能会导致您看到的错误(或者,问题出在第二个管道而不是第一个管道中)。
如果您没有使用 GNU sed(并且错误表明您可能没有使用),您可能需要对模式进行暴力破解。
sed -e "s/[pP][oO][rR][tT]2/${PORT}/g" \
-e 's/[iI][pP]2/IPADDRESS/g' \
-e 's/[uU][sS][eE][rR]2/USER/g' \
-e 's/[pP][aA][sS][sS]2/PASSWORD/g' \
/crawler/bc_daemon.php > bc_daemon.php
Run Code Online (Sandbox Code Playgroud)
请注意,如果当前目录是/crawler因为输出重定向会在执行命令之前破坏输入文件,则这两个管道都会严重失败。
| 归档时间: |
|
| 查看次数: |
6992 次 |
| 最近记录: |