分页: 1 / 1

关于sed的

发表于 : 2007-12-11 16:31
loogson
小弟刚学脚本,想请教一下下面这句什么意思,谢谢。
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"

发表于 : 2007-12-12 9:50
aBiNg
替换并打印。

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

发表于 : 2007-12-13 14:38
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 得到的是分区名呀?我主要是不太明白这前面一段是什么意思

发表于 : 2007-12-13 16:35
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

发表于 : 2007-12-13 17:27
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,别见笑,我刚学脚本,希望指教,谢谢

发表于 : 2007-12-13 17:48
bones7456
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 等于前面的括号里面的内容.

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

发表于 : 2007-12-13 19:33
BigSnake.NET
没见过 sed 用得这么累的..

代码: 全选

sed -nr "s/^(\s+\S+){3}\s+(\S+)/\2/p" /proc/partitions

发表于 : 2008-01-10 0:37
guocb
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