sed命令在MAC下使用出现sed: 1: "Readme.md": invalid command code R
的解决方法
Linux命令:
echo 输入更新内容:
read m
echo 更新readme中.......
sed -i "2 i #### $(date '+%Y-%m-%d %H:%M:%S %A') \n $m" Readme.md
如果此命令在MAC下输入,会报错:
sed: extra characters after \ at the end of a command
MAC命令:
echo 输入更新内容:
read m
echo 更新Readme中.......
sed -i '' "1a\\
#### `date '+%Y-%m-%d %H:%M:%S %A'` \\
$m
" Readme.md
在某行的前面添加,只需要把’a’换成’i’即可。
此命令不会在原文件上进行更改,只是会把结果输出到termimal里,如果需要直接更改文件,需要参数 -i
问题一:-i参数的问题
问题描述:sed编辑命令:sed -i 's/a/b/g' test.txt
报错:sed: 1: "test.txt": undefined label 'est.txt'
解决方案:sed -i '' 's/a/b/g' test.txt
在-i
后面加上一对''
原因:-i参数是强制替换原有文件,但是mac强制要求备份,否则报错,这个在Mac上系统会有问题,否则-i参数无法使用,请注意。
问题二:匹配a追加内容问题
问题描述:sed追加命令:sed -i '' "/a/a\xxx" test.txt
匹配到a字符后追加xxx内容
报错:sed: 1: "/a/a\xxx": extra characters after \ at the end of a command
解决方案:在追加内容前换行,且要用双斜杠\
sed -i '' "/a/a\\
xxx \\
" test.txt
备注:/i
操作同理
判断操作系统
判断操作系统来执行相应的脚本,比如sed命令在Linux和MacOS下不同,这时候可以使用uname -s
来进行判断然后执行相应的语句
#!/bin/sh
echo 请输入更新内容:
read m
echo 更新日志中...
System=$(uname -s)
if [ $System == "Darwin" ]; then
echo "Use MacOS"
sed -i '' "1a\\
#### $(date '+%Y-%m-%d %H:%M:%S %A') \\
$m
" ChangeLog.md
elif [ $System == "Linux" ]; then
echo "Use Linux"
sed -i "2 i #### $(date '+%Y-%m-%d %H:%M:%S %A') \n $m" ChangeLog.md
else
echo "Other OS: $System"
fi
git add .
git commit -m $m
gitRemote=$(git remote)
git push $gitRemote
其他
流程控制添加多项选择,根据选择内容来执行制定脚本
#!/bin/sh
echo "1. first"
echo "2. second"
echo "3. third"
read -p "Please choose your country: " i
case "$i" in
1)
echo "Your country is China."
;;
2)
echo "Your country is USA."
;;
3)
echo "Your country is England."
;;
*)
echo "Please choose a right item."
esac