关于sed的

sh/bash/dash/ksh/zsh等Shell脚本
回复
loogson
帖子: 15
注册时间: 2006-11-29 14:50

关于sed的

#1

帖子 loogson » 2007-12-11 16:31

小弟刚学脚本,想请教一下下面这句什么意思,谢谢。
sed -n "s/\ *[0-9][0-9]*\ *[0-9][0-9]*\ *[0-9][0-9][0-9]*\ \([a-z]*[0-9][0-9]*\)/\1/p"
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

#2

帖子 aBiNg » 2007-12-12 9:50

替换并打印。

\1 替代 [a-z]*[0-9][0-9]*
loogson
帖子: 15
注册时间: 2006-11-29 14:50

#3

帖子 loogson » 2007-12-13 14:38

\1 替代 [a-z]*[0-9][0-9]* ?

可sed -n "s/\ *[0-9][0-9]*\ *[0-9][0-9]*\ *[0-9][0-9][0-9]*\ \([a-z]*[0-9][0-9]*\)/\1/p" /proc/partitions 得到的是分区名呀?我主要是不太明白这前面一段是什么意思
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

#4

帖子 aBiNg » 2007-12-13 16:35

loogson 写了:\1 替代 [a-z]*[0-9][0-9]* ?

可sed -n "s/\ *[0-9][0-9]*\ *[0-9][0-9]*\ *[0-9][0-9][0-9]*\ \([a-z]*[0-9][0-9]*\)/\1/p" /proc/partitions 得到的是分区名呀?我主要是不太明白这前面一段是什么意思
前面一段配匹了一堆空格+数字+字母的东东,有什么不太明白的呢?

要得到分区名,直接awk不就行了?这sed用的,牛x了点,呵呵。

代码: 全选

awk '{print $4}' /proc/partitions
loogson
帖子: 15
注册时间: 2006-11-29 14:50

#5

帖子 loogson » 2007-12-13 17:27

aBiNg 写了:
loogson 写了:\1 替代 [a-z]*[0-9][0-9]* ?

可sed -n "s/\ *[0-9][0-9]*\ *[0-9][0-9]*\ *[0-9][0-9][0-9]*\ \([a-z]*[0-9][0-9]*\)/\1/p" /proc/partitions 得到的是分区名呀?我主要是不太明白这前面一段是什么意思
前面一段配匹了一堆空格+数字+字母的东东,有什么不太明白的呢?

要得到分区名,直接awk不就行了?这sed用的,牛x了点,呵呵。

代码: 全选

awk '{print $4}' /proc/partitions
geexbox里的,我也觉得写这脚本的人有点牛X,呵。请教一下/p前面的\1是什么意思?

我看sed替换的格式是 s/ pattern-to-find /replacement-pattern/ 所以不知道上面哪些是pattern-to-find 哪块是replacement-pattern,别见笑,我刚学脚本,希望指教,谢谢
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#6

帖子 bones7456 » 2007-12-13 17:48

loogson 写了:
aBiNg 写了:
loogson 写了:\1 替代 [a-z]*[0-9][0-9]* ?

可sed -n "s/\ *[0-9][0-9]*\ *[0-9][0-9]*\ *[0-9][0-9][0-9]*\ \([a-z]*[0-9][0-9]*\)/\1/p" /proc/partitions 得到的是分区名呀?我主要是不太明白这前面一段是什么意思
前面一段配匹了一堆空格+数字+字母的东东,有什么不太明白的呢?

要得到分区名,直接awk不就行了?这sed用的,牛x了点,呵呵。

代码: 全选

awk '{print $4}' /proc/partitions
geexbox里的,我也觉得写这脚本的人有点牛X,呵。请教一下/p前面的\1是什么意思?

我看sed替换的格式是 s/ pattern-to-find /replacement-pattern/ 所以不知道上面哪些是pattern-to-find 哪块是replacement-pattern,别见笑,我刚学脚本,希望指教,谢谢
pattern-to-find=

代码: 全选

\ *[0-9][0-9]*\ *[0-9][0-9]*\ *[0-9][0-9][0-9]*\ \([a-z]*[0-9][0-9]*\)
replacement-pattern=

代码: 全选

\1
\1 等于前面的括号里面的内容.
关注我的blog: ε==3
loogson
帖子: 15
注册时间: 2006-11-29 14:50

#7

帖子 loogson » 2007-12-13 18:51

有点明白了,谢谢。
还有一点不明白,[0-9][0-9]不是指两位数字吗?那[a-z]*[0-9][0-9]*怎么会匹配sda1呢?sda1不是只有一位数字?希望赐教,谢谢。
另外,echo "1111122223333"|sed "s/*/test/"不知怎么没有实现我的本意:将字符替换成test,后来查到必需是echo "1111122223333"|sed "s/.*/test/"加了个点,不知为什么?
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#8

帖子 BigSnake.NET » 2007-12-13 19:33

没见过 sed 用得这么累的..

代码: 全选

sed -nr "s/^(\s+\S+){3}\s+(\S+)/\2/p" /proc/partitions
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
guocb
帖子: 20
注册时间: 2008-01-10 0:02

#9

帖子 guocb » 2008-01-10 0:37

loogson 写了:有点明白了,谢谢。
还有一点不明白,[0-9][0-9]不是指两位数字吗?那[a-z]*[0-9][0-9]*怎么会匹配sda1呢?sda1不是只有一位数字?希望赐教,谢谢。
另外,echo "1111122223333"|sed "s/*/test/"不知怎么没有实现我的本意:将字符替换成test,后来查到必需是echo "1111122223333"|sed "s/.*/test/"加了个点,不知为什么?
*=0..n
回复