Sed脚本处理
(本文例子全用passwd文件实验,sed编写通用性脚本非常复杂,低效,所以建议当我们用sed处理文本时,先观察文本内容规律,针对脚本的特点来编写合适的脚本)
 
1,删除文件每行的第一个字符。
sed 's/^.//' /etc/passwd
 
2,删除文件每行的第二个字符。
sed -r 's/^(.)./\1/' /etc/passwd
 
3,删除文件每行的最后一个字符。
sed -r 's/.$//' /etc/passwd
 
4,删除文件每行的倒数第二个字符。
sed -r 's/.(.)$/\1/' /etc/passwd
 
5,删除文件每行的第二个单词。
sed -r 's/^([a-Z]+[^a-Z]+)[a-Z]+/\1/' /etc/passed
 
6,删除文件每行的倒数第二个单词。
sed -r 's/[a-Z]+([^a-Z]+[a-Z]+)$/\1/' /etc/passwd
 
7,删除文件每行的最后一个单词。
sed -r 's/[a-Z]+$//' /etc/passwd
sed -r 's/[a-Z]+([^a-Z]+$)/\1/' /etc/passwd    /*当一行中最后为非字母*/

8,交换每行的第一个字符和第二个字符。
sed -r 's/^(.)(.)/\2\1/' /etc/passwd
 
9,交换每行的第一个字符和第二个单词。
sed -r 's/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)/\4\2\3\1/' /etc/passwd

10,交换每行的第一个单词和最后一个单词。
sed -r 's/(^[a-Z]+)([^a-Z].*[^a-Z]+)([a-Z]+$)/\3\2\1/' /etc/passwd
 
11,删除一个文件中所有的数字。
sed -r 's/[0-9]//g' /etc/passwd

12,删除每行开头的所有空格。
sed -r 's/^[ ]//' /etc/passwd
 
13,用制表符替换文件中出现的所有空格。
sed -r 's/[ ]+/\t/g' /etc/passwd

14,把所有大写字母用括号()括起来。
sed -r 's/([A-Z])/(\1)/g' /etc/passwd

15,打印每行3次。
sed '{p;p}' /etc/passwd
 
16,隔行删除。
sed -n '{1~2p}' /etc/passwd   /*先不显示,然后用P命令隔行打印*/
 
17,把文件从第22行到第33行复制到第56行后面。
sed -r '{22h;23,33H;56G}' /etc/passwd
 
18,把文件从第22行到第33行移动到第56行后面。
sed -r '{22h;23,33H;56G;22,33d}' /etc/passwd
 
19,只显示每行的第一个单词。
sed -r 's/^(.)(.*)/\1/' /etc/passwd
 
20,打印每行的第一个单词和第三个单词。
sed -r 's/([a-Z]+)([^a-Z]+[a-Z]+[^a-Z]+)([a-Z]+)/\3\2\1/' passwd
 
21,将格式为    mm/yy/dd    的日期格式换成   mm;yy;dd
date |sed -r 's/([0-9]+)([^0-9]+[0-9]+[^0-9]+)([0-9]+)([^0-9]+[A-Z]+)$/\3\2\1\4/'
date "+%y;%m;%d"
date "+%y/%m/%d/"|sed 's|/|;|g'

22, 逆序输出文件每一行
sed -r '1{h;d};2,3{G;h;d};$G' abc