shell脚本解题2

问题:
如下文本

60.208.0.224
60.208.103.192
131.9.124.72
60.208.20.119
60.208.20.9
2.110.213.40
8.56.32.24
60.53.37.128
60.3.98.1

怎么先按ip的第一位sort,然后按第二位sort,然后按第三,第四

结果是这样
2.110.213.40
8.56.32.24
60.3.98.1
60.53.37.128
60.208.0.224
60.208.20.9
60.208.20.119
60.208.103.192
131.9.124.72

解法:
1.
sort -t. -k1,1n -k2,2n -k3,3n -k4,4n

2.
sed ‘s/./ /g’ urfile|sort -nt ‘ ‘ -k1 -k2 -k3 -k4|sed ‘s/ /./g’

问题:
httpd.conf文件中含有以下内容,要把Directory块中含有/usr/local/apache/cgi-bin这一块注释掉:

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

<directory "/usr/local/apache/cgi-bin">
AllowOverride None
OptionsNone
Orderallow,deny
Allow fromall
</directory>

<directory "/var/www/icons">
    Optioin Index
    Allow all
</directory>

解法
1.

sed -r ‘/^(<directory .cgi-bin.)/{s/^/#/;:a;n;/^$/!s/^/#/;ta} ‘ httpd.conf
今天写的最长的一行。

2.

sed ‘/^<directory .cgi-bin./,/^<\/Directory>/s/^/#/; ‘ httpd.conf
sed替换大全:

sed ‘s/foo/bar/‘ # 替换第一次出现
sed ‘s/foo/bar/4’ # 替换第四次出现
sed ‘s/foo/bar/g’ # 替换所有的出现
sed ‘1s/foo/bar/‘ # 替换第一行第一次出现

Comments

luguo: 第1个的perl解法: perl -n -e ‘push @foo, $_; END {print sort {pack(“C4”,split(/\./,$a)) cmp pack(“C4”,split(/\./,$b))} @foo;}’ test.txt

dream: 1. sed ‘s/\./ /g’ urfile|sort -nt ‘ ‘ -k1 -k2 -k3 -k4|sed ‘s/ /./g’,这行为什么不像解1中需要 -k1,1 -k2,2,而只是-k1 -k2, btw, 为什么要,1 ,2 ,3…看了半天manpage 没看懂。 2. sed -r ‘/^(<Directory.cgi-bin.)/{s/^/#/;:a;n;/^$/!s/^/#/;ta} ‘ httpd.conf,这行有点太难懂了… orz 3. 最后一个sed 解释,赞!

cocobear: perl的看着好怪啊! 1,2,3是把每一行的内容分段进行sort;第二种解法把.替换为空格,sort默认是按空格进行分段,所以就不需要指定POS2了。

dream: hehe 明白了,谢谢讲解

坚持原创技术分享,您的支持将鼓励我继续创作!