正则表达式(Regular Expression)
以行为单位来进行字符串的处理操作。主要分为:基础正则表达式和扩展正则表达式
基础正则表达式
语系对正则表达式的影响
LANG=C时,01234…ABCD … Zabcd…z
LANG=zh_CN时,01234…aAbBcCdD…zZ
下面都是以LANG=C来记忆。
基础正则表达式字符的集合
对于^而言,在[]内部为取反,在外部为行首,
sed工具
sed [-nefri] [操作]
参数:
-n:使用安静(silent)模式,一般的用法中,所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n之后,则只有经过sed特殊处理之后的那一行(或操作)才会被列出来。
-e:直接在命令行模式进行sed的操作编辑。同时进行两个操作的时候,需要使用-e
例:cat /etc/passwd | sed -e ‘4d’ -e ‘6c no six line’ >passwd.new
-i:直接修改读取文件的内容,而不是由屏幕输出
参数后面的操作说明:[n1,[n2]] function
n1,n2:不见得会存在,一般代表选择进行操作的行数
function包含以下几项:
d:删除
如:sed '/^$/d‘ 删除空白行
sed ‘2,5d’ 删除2~5行
sed ‘3,$d’ 删除3到最后一行
c:替换,c后面可以接字符,这些字符可以替换n1,n2直接的行。若只有一个数字则替换该行。
a:新增,a后面可以接字符,这些字符会在新的一行出现(目前的下一行)
如:nl /etc/passwd | sed '2a Drink tea or…
>drink beer? ’ 这表示在第三行添加Drink tea or…在第四行添加drink beer? 这里必须以反斜杠来进行新行的增加。
i:插入,i后面可以接字符,这些字符会在新的一行出现(目前的上一行)
p:打印,通常与sed -n一起使用,将经过sed处理的那一行打印出来。
查找并替换
sed ‘s/要被替换掉的字符/新的字符/g’
sed ‘s/#.*$//g’ 将以#开始的注释行都替换为空白行
直接修改文件内容(危险操作)
sed -i ‘s/\.$/\!/g’ regular.txt 将其中的每行结尾的任意字符替换为!
扩展正则表达式
可以使用grep -E或者egrep 来使用正则表达式
特别需要注意:!在正则表达式不是特殊字符,反向选择是^,而不是!
选择不是a-z的字母,[^a-z],而不是[!a-z]