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
(本文例子全用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
转载于:https://blog.51cto.com/feixiong/324474