这行命令可以帮助你删除包含 Merge 的 commit 块(任意多个这样的文字块)
sed -n '/commit/{:ahn/Merge/b:cHn$bd/commit/!bc:dxpxba}' log > log.txt运行效果如下:
我的命令可能复杂了些。稍微解释一下,仅供参考:
其中:a :b :c :d 是命令跳转标签label
/commit/{:ahn
当某行找到 commit 时,将此行复制到 hold space,然后读取下一行。
/Merge/b
如果刚刚读取到的新行,包含Merge,则结束对本行的处理,读取下一行,并继续寻找commit
如果刚刚读取到的新行,不包含Merge,那么继续对本行执行后续命令:
:cHn$bd/commit/!bc:dxpxba}
将此行追加到hold space,读取下一行,如果没有到最后一行,并且没有找到commit,那么执行命令bc,跳转到c标签——循环这个过程,直到读取到文件末尾或者读取到包含commit的行。然后,x,将hold space的内容与 pattern space的内容对调,p,输出pattern space的内容(即,不包含Merge的块),x,再次对调,pattern space变成之前的内容(文件末尾或者包含commit的行)。ba,跳转到标签a,继续对此行进行检查,重复步骤1,2,3。
如果上面的命令改为:
sed -n '/commit/{:ahn/Merge/!b:cHn$bd/commit/!bc:dxpxba}' log >log.txt
那么,输出结果为,只包含 Merge 的 commit 块
代码如下:
str="/home/gateman"
if [ ${str:0:1} = "/" ]then
echo "yes'
fi
${str:0:1} 中0表示从第几个字符开始,1表示截取多长。
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
扩展资料
Linux shell 截取字符变量的前8位:
实现方法有如下几种:
expr substr “$a” 1 8
echo $a|awk ‘{print substr(,1,8)}’
echo $a|cut -c1-8
echo $
expr $a : ‘\(.\\).*’
echo $a|dd bs=1 count=8 2>/dev/null
按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
小结:shell对应字符串的处理方法很多,根据需求灵活选择。
在做shell批处理程序时候,经常会涉及到字符串相关 *** 作。有很多命令语句,如:awk,sed都可以做字符串各种 *** 作。 其实shell内置一系列 *** 作符号,可以达到类似效果,大家知道,使用内部 *** 作符会省略启动外部程序等时间,因此速度会非常的快。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)