|
藍森林 http://www.lslnet.com 2006年6月26日 11:18
請教高手,關於sed的一個問題
[code][root@lfs tmp]# cat aa
#!/bin/sed -f
/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/
[root@lfs tmp]# cat bb
#!/bin/sed -f
#/^[^ ]/!d
#N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/
[root@lfs tmp]# ifconfig|sed '/^[^ ]/!d;n'
eth0 Link encap:Ethernet HWaddr 00:0F:1F:65:02:70
inet addr:202.××××× Bcast:202.106.185.127 Mask:255.255.255.192
eth1 Link encap:Ethernet HWaddr 00:0F:1F:65:02:71
inet addr:192.168.123.1 Bcast:192.168.123.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
[root@lfs tmp]# ifconfig|sed '/^[^ ]/!d;n'|./aa
eth0 202.××××××
eth1 192.168.123.1
lo 127.0.0.1
[root@lfs tmp]# ifconfig|sed '/^[^ ]/!d;n'|./bb
eth0 Link encap:Ethernet HWaddr 00:0F:1F:65:02:70
inet addr:202.×××××× Bcast:202.106.185.127 Mask:255.255.255.192
eth1 Link encap:Ethernet HWaddr 00:0F:1F:65:02:71
inet addr:192.168.123.1 Bcast:192.168.123.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0[root@lfs tmp]# [/code]
為什麼會這樣呢? |
請教高手,關於sed的一個問題
:shock: |
請教高手,關於sed的一個問題
為什麼不? |
請教高手,關於sed的一個問題
腳本aa和bb所不同的就是bb少了下面兩個語句
/^[^ ]/!d
N
但是再把數據傳遞給腳本bb前,我已經用命令
sed '/^[^ ]/!d;n'
處理了一遍數據。
在這兩個腳本中,最後的一個語句
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/
所處理的數據是完全一樣的,所以結果也應該一樣啊,但是為什麼不同呢? |
請教高手,關於sed的一個問題
n!=N |
請教高手,關於sed的一個問題
而且,在sed中只有N;H;G命令會產生\n |
請教高手,關於sed的一個問題
| 請教高手,關於sed的一個問題
n 讀入下一行到模式空間,內部的行指針+1
N 當前模式空間尾部加"\n" ,讀入下一行追加到模式空間尾部 |
請教高手,關於sed的一個問題
-->
這個我明白了,但是為什麼我把n改成N了,下面的命令還是沒有正確結果呢?
[code]
[root@lfs tmp]# ifconfig|sed '/^[^ ]/!d;N'|./bb
eth0 Link encap:Ethernet HWaddr 00:0F:1F:65:02:70
inet addr:202.106.185.74 Bcast:202.106.185.127 Mask:255.255.255.192
eth1 Link encap:Ethernet HWaddr 00:0F:1F:65:02:71
inet addr:192.168.123.1 Bcast:192.168.123.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0[/code] |
請教高手,關於sed的一個問題
.........什麼是正確結果? |
請教高手,關於sed的一個問題
| 請教高手,關於sed的一個問題
/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/ |
請教高手,關於sed的一個問題
請看我的兩個腳本
[code][root@lfs tmp]# cat aa
#!/bin/sed -f
/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/
[root@lfs tmp]# cat bb
#!/bin/sed -f
#/^[^ ]/!d
#N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/ [/code]
現在的問題是,為什麼這兩個腳本得到的結果不一樣
[code][root@lfs tmp]# ifconfig|./aa
eth0 202.*******
eth1 192.168.123.1
lo 127.0.0.1
[root@lfs tmp]# ifconfig|sed '/^[^ ]/!d;N'|./bb
eth0 Link encap:Ethernet HWaddr 00:0F:1F:65:02:70
inet addr:202.******** Bcast:202.******* Mask:255.255.255.192
eth1 Link encap:Ethernet HWaddr 00:0F:1F:65:02:71
inet addr:192.168.123.1 Bcast:192.168.123.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0[/code]
雖然腳本bb少了兩個命令
/^[^ ]/!d
N
但是把數據傳遞給bb前,我用命令[code]sed '/^[^ ]/!d;N'[/code]把數據處理了,所以應該有相同的結果啊。 |
請教高手,關於sed的一個問題
難道在腳本中的
[code]/^[^ ]/!d
N [/code]和命令行中的
-->
處理出的數據格式不一樣?
求高手解釋 |
請教高手,關於sed的一個問題
一個循環vs兩個循環當然不一樣了^_^
這是一個循環完成,執行s///命令時模式空間有兩行內容
[code]/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/ [/code]
這是分兩個循環完成,執行s///命令時模式空間只有一行內容
[code]ifconfig|sed '/^[^ ]/!d;N'|./bb [/code] |
請教高手,關於sed的一個問題
| 請教高手,關於sed的一個問題
| 請教高手,關於sed的一個問題
-->
如果有不同就奇怪了
比如一個文件f,內容是
a1
b2
那麼
sed 'n' f
的過程是
讀入a1 到模式空間,打印出 a1
然後n讀入b2到模式空間,打印出b2
sed 'N' f
讀入a1到模式空間
然後N加\n到a1後面讀入b2然後打印 "a1\nb2"
請比較一下
echo "a1
b2"|sed 'n;='
與
echo "a1
b2"|sed 'N;='
另建議讀
http://phi.sinica.edu.tw/aspac/reports/96/96005/ |
請教高手,關於sed的一個問題
我是個新手,請給具體解釋一下下面的意思。先謝謝了!! :roll: :roll:
#!/bin/sed -f
/^[^ ]/!d
N
s/^\([^ ]*\).*\n.*addr:\([^ ]*\).*/\1 \2/ |
請教高手,關於sed的一個問題
我一看sed的代碼就頭暈。。。怎麼辦??? |
| |