- sed -e /^noshow/d test.txt
- sed -n /[^noshow]/ test.txt
- awd /[^noshow]/ test.txt
grep -v 'boshow' test.txt
grep 常用参数速记
- egrep 等同 grep -E
-C:打印出匹配的行的上下文前后各 n行。
-i: 不区分大小写字符。
-n:在输出的每行前面加上它所在的文件中它的行号,
-v: 也就是说反向匹配
-o : 显示匹配的行中与 PATTERN 相匹配的部分。
-L:和上面的-l相对,显示不匹配的文件名,
-R,-r: 递归地读每一目录下的所有文件。
^$:代表空行:
-e:该选型可以匹配多个模式
sed命令
sed全称是stream editor ,他的特点是针对行来处理,一般配合正则表达式来处理。
参数速记
-n 使用安静(silent)模式(想不通为什么不是-s)。
在一般sed的用法中,所有来自stdin的内容一般都会被列出到屏幕上。
但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来;
-r 让sed命令支持扩展的正则表达式(默认是基础正则表达式);
-i 直接修改读取的文件内容,而不是由屏幕输出。
几个重要的操作参数
a \: append即追加字符串, a \的后面跟上字符串s(多行字符串可以用\n分隔),
则会在当前选择的行的后面都加上字符串s;
c \: 取代/替换字符串,c \后面跟上字符串s(多行字符串可以用\n分隔),则会将当前选中的行替换成字符串s;
d: delete即删除,该命令会将当前选中的行删除;
i \: insert即插入字符串,i \后面跟上字符串s(多行字符串可以用\n分隔),则会在当前选中的行的前面都插入字符串s;
p: print即打印,该命令会打印当前选择的行到屏幕上;
s: 替换,通常s命令的用法是这样的:1,2s/old/new/g,将old字符串替换成new字符串;其中的g 表示global全局替换,如果没有global的话,只会替换每一行中的第一个匹配的内容;
=: 显示文件行号
下面通过几个例子快速复习下
sed '1a \add one' my.txt
sed '/sb/c \ 2d' my.txt
sed -n '1,4p' my.txt #显示第1-4行;
sed 's/sb/2b/g' my.txt #替换;
sed '1,5d' my.txt #删除;
正则表达式来替换
# 如果你这样搞的话,就会有问题
$ sed 's/<.*>//g' html.txt
Understand?
# 要解决上面的那个问题,就得像下面这样。
# 其中的'[^>]' 指定了除了>的字符重复0次或多次。
$ sed 's/<[^>]*>//g' html.txt
This is what I meant. Understand?
指定行替换,只替换第三行
$ sed "3s/my/your/g" pets.txt
This is my cat
my cat's name is betty
This is your dog
my dog's name is frank
This is my fish
my fish's name is george
This is my goat
my goat's name is adam
替换自定范围,只替换第3到第6行的文本。
$ sed "3,6s/my/your/g" pets.txt
This is my cat
my cat's name is betty
This is your dog
your dog's name is frank
This is your fish
your fish's name is george
This is my goat
my goat's name is adam
只替换每一行的第一个s
$ sed 's/s/S/1' my.txt
ThiS is my cat, my cat's name is betty
ThiS is my dog, my dog's name is frank
ThiS is my fish, my fish's name is george
ThiS is my goat, my goat's name is adam
只替换每一行的第二个s
$ sed 's/s/S/2' my.txt
This iS my cat, my cat's name is betty
This iS my dog, my dog's name is frank
This iS my fish, my fish's name is george
This iS my goat, my goat's name is adam
只替换第一行的第3个以后的s
$ sed 's/s/S/3g' my.txt
This is my cat, my cat'S name iS betty
This is my dog, my dog'S name iS frank
This is my fiSh, my fiSh'S name iS george
This is my goat, my goat'S name iS adam
多个匹配
如果我们需要一次替换多个模式,可参看下面的示例:(第一个模式把第一行到第三行的my替换成your,第二个则把第3行以后的This替换成了That)
$ sed '1,3s/my/your/g; 3,$s/This/That/g' my.txt
This is your cat, your cat's name is betty
This is your dog, your dog's name is frank
That is your fish, your fish's name is george
That is my goat, my goat's name is adam
上面的命令等价于:(注:下面使用的是sed的-e命令行参数)
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt
我们可以使用&来当做被匹配的变量,然后可以在基本左右加点东西。如下所示:
$ sed 's/my/[&]/g' my.txt
This is [my] cat, [my] cat's name is betty
This is [my] dog, [my] dog's name is frank
This is [my] fish, [my] fish's name is george
This is [my] goat, [my] goat's name is adam
圆括号匹配
使用圆括号匹配的示例:(圆括号括起来的正则表达式所匹配的字符串会可以当成变量来使用,sed中使用的是\1,\2…)
$ sed 's/This is my \([^,&]*\),.*is \(.*\)/\1:\2/g' my.txt
cat:betty
dog:frank
fish:george
goat:adam
上面这个例子中的正则表达式有点复杂,解开如下(去掉转义字符):
正则为:This is my ([^,]),.is (.*)
匹配为:This is my (cat),……….is (betty)
然后:\1就是cat,\2就是betty
参考
http://10706198.blog.51cto.com/10696198/1792393
http://www.cnblogs.com/yinheyi/p/6653592.html
网友评论