sed命令在MAC和Linux下的不同使用方式


张登友,张登友的博客,张登友的网站——

sed命令在MAC下使用出现sed: 1: "Readme.md": invalid command code R的解决方法

Linux命令:

now=$(date "+%Y-%m-%d %H:%M:%S %A")
echo 输入更新内容:
read m
echo 更新readme中.......
sed -i "2 i #### $now \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操作同理

流程控制

添加多项选择,根据选择内容来执行制定脚本

#!/usr/bin/env bash 
echo "1. China" 
echo "2. USA"
echo "3. England"
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

文章作者: 张登友
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张登友 !
评论
  目录