【学习 - shell - unix/mac的sed命令】

在jenkins构建时,使用在linux服务器验证过的脚本,在mac执行机上一直报错,查看是sed -r命令异常,报错日志:

++ sed -r 's/"//g'
sed: illegal option -- r
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]

查找资料才了解到,mac和unix用的是BSD的shell,linux用的是gun的shell,而这两种在某些命令上存在些许差异,而这次的问题就是由于mac shell sed命令没有-r参数(在linux shell中-r参数表示使用正则运算式作为查找条件)
在mac查看相关sed解释:man sed
针对本次截取目的:去掉字符串中的双引号
linux shell sed:echo $build_moduleList | sed -r 's/"//g’
mac shell sed:echo $build_moduleList | sed 's/"//g’

在此也记录下查询到的其他sed差异:

1,sed -i
linux sed -i ‘s/old/new/g’ file
mac OS sed -i ‘’ ‘s/old/new/g’ file # 加空串是因为这里的sed强制要求备份

2,插入行
linux sed -i “/startline/a\$string” file # 行后追加
sed -i “/endline/i\$string” file # 行前插入
mac OS sed -i “” -e “/startline/a\
$string” file # 行后追加,需要加-e和换行
sed -i “”-e “/endline/i\
$string” file # 行前插入,需要加-e和换行

3,删除行
a) 删除匹配行中间的部分:
linux sed ‘/PATTERN-1/,/PATTERN-2/{//!d}’ file
mac OS sed ‘/PATTERN-1/,/PATTERN-2/{//!d;}’ file # 花括号前多加个分号,以避免 extra characters at the end of d command 错误

b) 删除匹配行及中间的部分:
linux & mac OS sed ‘/PATTERN-1/,/PATTERN-2/d’ file

c) 删除匹配行及之后的部分:
linux & mac OS sed ‘/PATTERN-1/,$d’ file

d) 删除特定行号直接的部分(如2-4行):
linux & mac OS sed ‘2,4d’ file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章