iOS Script

sed 简单使用

2017-06-23  本文已影响55人  观星

sed

sed命令以行为单位对文本文件进行处理,可以直接指定行号,如1,也可以通过正则匹配对匹配成功的行进行处理

直接指定行号

#删除第一行
sed 1d test.txt

匹配内容

所有匹配到的行都会执行操作

#匹配 删除包含er的行
sed /er/d test.txt

指定区间

指定区间使用','隔开起始位置和结束位置

#指定行号 删除1-5行
sed 1,5d test.txt

#匹配 删除起始位置以<<<<开头的行 ,结束位置以'===='开头的行
sed '/^<<<</,/^====/'d test.txt

#指定行号和匹配行是同等地位,可以混用
#删除第2行-以'===='开头的行
sed  '2,/^====/'d test.txt

sed应用

现在要去掉所有的0
有一批图片,命名如下

qiqiu_00005.png ... qiqiu_00045.png

现在要去掉数字前面的0

#!bin/bash
for file in `ls $1` 
do
    if test -f $1"/"$file  
    then
        if echo $file | grep -q '.png$'
        then
            newname=$(echo "$file" | sed 's/0\+//')
            echo $newname
            mv $1"/"$file $1"/"${newname}
        fi
    fi
done

主要还是

echo "$file" | sed 's/0\+//'

sed是可以使用正则表达式的,这里用了+出现一次或者多次,因为出现的位置特殊,需要转义,否则+不具备特殊含义。

sed默认只处理了第一个匹配到的数据,否则qiqiu_00040.png应该变成qiqiu_4.png而不是qiqiu_40.png,但是可以添加参数来匹配所有的

echo q_00040 | sed 's/0\+//' 
q_40

 echo q_00040 | sed 's/0\+//g'     
q_4

这种写法也有问题,如果是qiqiu_00000就变成qiqiu_

提取字符串

有时候想要匹配到的内容,可以参考下面的命令 \0

echo q_00040.png | sed 's/0\+[0-9]*/\0@2x/'
q_00040@2x.png

上一篇下一篇

猜你喜欢

热点阅读