- 把/etc/passwd 复制到/root/test.txt,用sed打印所有行
- 打印test.txt的3到10行
- 打印test.txt 中包含 ‘root’ 的行
- 删除test.txt 的15行以及以后所有行
- 删除test.txt中包含 ‘bash’ 的行
- 替换test.txt 中 ‘root’ 为 ‘toor’
- 替换test.txt中 ‘/sbin/nologin’ 为 ‘/bin/login’
- 删除test.txt中5到10行中所有的数字
- 删除test.txt 中所有特殊字符(除了数字以及大小写字母)
- 把test.txt中第一个单词和最后一个单词调换位置
- 把test.txt中出现的第一个数字和最后一个单词替换位置 (注:实际意思是每行的第一个数字和最后一个单词,而不是整个文件的第一个数字和最后一个单词)
- 把test.txt 中第一个数字移动到行末尾
- 在test.txt 20行到末行最前面加 ‘aaa:’
作答:
- cp /etc/passwd /root/test.txt cd /root sed -n '1,$'p test.txt
- sed -n '3,10'p test.txt
- sed -n '/root/'p test.txt
- sed '15,$'d test.txt
- sed '/bash/'d test.txt
- sed 's/root/toor/g' test.txt
- sed 's#/sbin/nologin#/bin/login#g' test.txt
- sed '5,10s/[0-9]//g' test.txt
- sed 's/[^ 0-9a-zA-Z]//g' test.txt
- sed 's/\([a-zA-Z][a-zA-Z]*\)\([^ a-zA-Z].*\)\([^ a-zA-Z]\) \([a-zA-Z][a-zA-Z]*$\)/\4\2\3\1/' test.txt
- sed 's/\([^ 0-9][^ 0-9]*\)\([0-9][0-9]*\)\([^ 0-9].*\)\([^ a-zA-Z]\) \([a-zA-Z][a-zA-Z]*$\)/\1\5\3\4\2/' test.txt--#该命令适用于 test.txt文件的第一个字符和最后一个字符不是数字的情况,如果test.txt文件第一个字符或最后一个字符就是数字而非字符则命令不生效,需要调整命令
12. sed 's/\([^ 0-9][^ 0-9]*\)\([0-9][0-9*]\)\([^ 0-9].*$\)/\1\3\2/' test.txt
13. sed '20,$s/(.*)/aaa:&/' test.txt
扩展:
1、打印某行到某行之间的内容http://ask.apelearn.com/question/559
作答:sed -n '4,8'p test ---> sed -n '/\[abcfd]/,/\[rty]\/'p test #指定具体关键字
2、sed转换大小写http://ask.apelearn.com/question/7758
3、sed在某一行最后添加一个数字http://ask.apelearn.com/question/288
命令:sed 's/\(^t.*\)/\1 555/' 1.txt ,也可使用:sed 's/\(^t.*\)/& 555/' 1.txt , 前面只有一个()时,可以用"&"或“\1”代替括号中的内容,
sed-r 's/(^t.*)/& 555/' 1.txt , 加“-r”选项,不需要使用脱意字符“\”
在1.txt文件中在含有“test”的行的前面添加abc字符串,并在后面跟一个空格
命令:sed '/test/s/^/abc/' 1.txt
在1.txt文件中在以一个asdd开头的行到以一个111开头的行的后面添加666,并在666前面加一个空格
命令:sed '/^asdd\>/,/^111\>/s/$/ abc/' 1.txt
注意,以下命令均无效,需严格匹配
sed '/^asd\>/,/^ 11\>/s/$/ abc/' 1.txt; sed -r '/^asdd>/,/^ 111>/s/$/ abc/' 1.txt
命令:sed '/asdd/{N;d}' 1.txt
--#删除文件1.txt中匹配关键词“asdd”的行及其下一行,N表示下一行,d表示删除
5、打印1到n行含某个字符串的行
http://ask.apelearn.com/question/1048
打印1.txt文件中2~7行中包含dddd的行,命令:sed-n '2,7{/dddd/p}'
1.txt