[实践OK]bad substitution的原因是用了sh不是bash导致的,Dockerfile批量替换里面的内容,cp filename{,bak} , find /var/www/ -name file -exec cp {}{,.bak} ; 递归备份文件,大括号扩展:cp和mv搭配{,}在shell作用,cp  快速备份 bash{} 扩展。

jackxiang 2017-7-2 19:32 | |
去掉没有用的扩展名:
mv /home/pi/.config/autostart/my.desktop.bak /home/pi/.config/autostart/my.desktop的shell花括号扩展简写:


拷贝新非后追加的文件名:


用Sed进行Dockerfile批量替换里面的内容:

-i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if SUFFIX supplied)
-n, --quiet, --silent

这样感觉没有直接用shell 替换来得方便好写,如下:
和Sed不一样,没有最后一个斜杠:
${string/needreplace/placedstr}

$ a=abcdefg123  
$ a=${a/123/456}
$ echo $a
abcdefg456
注意:不能是花括号里面有$,会报错:


bad substitution的原因是用了sh不是bash导致的:
在文件头里加上:
#!/bin/bash 替掉:#!/bin/sh
sh -x test.sh第3行总出现bad substitution提示信息,这与linux shell使用的是/bin/sh,还是/bin/bash有关系。我的脚本中指定使用的是/bin/bash shell,但是我在调试的时候使用的是sh shell,因此调试时导致错误提示信息。
原文链接:https://blog.csdn.net/u013516897/article/details/77965333


实战:


对docker tag 进行实践:

来自:https://jackxiang.com/post/9922/

先是打印出内容,然后再静默替换,然后再不区分大小写输入替换后的那行:echo filename|grep -i from;
xargs 的使用:
echo nginx-1.14.2/Dockerfile|xargs grep -i from
FROM registry.qr.xxxx.net/irdc_irdcops/alpine:3.10.0


要查找一个指定后缀文件里有没有一些指定字符串,显示出文件和行号等,还是用 xargs方便,如下:

上面一句顶exec两句,如下:



零.批量替换文件:
find . -type f -exec sed -n 's#S:"Username"=#S:"Username"=xiangdong#p' {} \;

一.
find /var/www/ -name file -exec cp {}{,.bak} \; 递归备份文件

1).
cp filename{,.bak}
quickly backup or copy a file with bash

2).
目录会自动omit删除掉; 目录不会复制;

来自:https://www.douban.com/note/422847745/

二.
cp filename{,.bak}
这个命令是用来把filename备份成filename.bak的
等同于命令
cp filename filename.bak
这里利用的是bash的brace expansion(大括号扩展)功能
按照bash手册(man bash)所述
bash支持{a,b,c}这样的扩展
比如a{d,c,b}e会被扩展成ade ace abe
所以
filename{,.bak}被扩展成filename filename.bak也就好理解了

同理可得:
tar cvfz leo{-20170202.tgz,}=tar cvfz leo-20170202.tgz leo

来自:http://leomars.blog.51cto.com/683246/1894566

三.
cp filename{,.bak} //注意花括号边并没有空格,否则就不 是扩展了,变成拷贝为{,.bak}文件了。
这个命令是用来把filename备份成filename.bak,等同于命令
cp filename filename.bak

这里利用的是bash的brace expansion(大括号扩展)功能,
按照bash手册(man bash)所述:
bash支持{a,b,c}这样的扩展,比如a{d,c,b}e 会被扩展成ade ace abe
所以
filename{,.bak}被扩展成filename filename.bak也就好理解了
原文http://www.haw-haw.org/node/1507

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/9321/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2022-9-15 00:13
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]