我们调用以下replace.sh
if "$1" !=""
then
REPLACE_AS=$1
else
REPLACE_AS="Tebow"
fi
find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 | xargs -0 -n 1 sed -i -e 's/SANCHEZ/'$REPLACE_AS'/g'
Run Code Online (Sandbox Code Playgroud)
抱歉原始问题.我试图使其成为命令行参数是可选的.IE如果有人没有把它,只是运行这个脚本,它使用Tebow.这似乎有效.但是,如果我使用命令行参数运行脚本它不起作用.
即
./test.sh
这将取代tebow.
然而./test.sh史密斯
不会用史密斯取代桑切斯的字符串
您可以使用shell参数扩展和表示法:
REPLACE_AS="${1:-Tebow}"
Run Code Online (Sandbox Code Playgroud)
在一行中做你在6中做的事.
另外,您编写的代码应该是:
if [ "$1" != "" ]
then REPLACE_AS="$1"
else REPLACE_AS="Tebow"
fi
Run Code Online (Sandbox Code Playgroud)
测试命令是[; 它需要围绕其操作数的空间和]最后的空间."$1"如果它包含空格,你需要引号; 引号"Tebow"是可选的,因为它不包含空格(但均匀性很好).
没有什么可以阻止你写作:
xargs -0 -n 1 sed -i -e 's/SANCHEZ/'"${1:-Tebow}"'/g'
Run Code Online (Sandbox Code Playgroud)
但变量的清晰度很好,特别是如果你多次引用它.
另外,xargs为了清楚起见,我会将管道留在行尾并在第二行开始第二个命令()(再次 - 这非常重要).
find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 |
xargs -0 -n 1 sed -i -e 's/SANCHEZ/'"$REPLACE_AS"'/g'
Run Code Online (Sandbox Code Playgroud)
有时,但不经常,我会缩进第二个命令.注意双引号"$REPLACE_AS"; 它可以防止替换文本中的空格问题.
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |