如何使用sed打印匹配模式

时间:2012-09-20 08:50:13

标签: regex linux bash sed awk

我想用sed打印匹配模式,例如:
我想得到uuid,所以我可以用这个:
blkid $1 | grep -o -E "[a-f0-9-]{8}([a-f0-9-]{4}){3}[a-f0-9-]{12}"
我该怎么做才能使用sed或awk?

6 个答案:

答案 0 :(得分:4)

sed

sed -n 's/pattern/&/p' file

-n告诉sed要安静,&是匹配的字符串,p是要打印的。

awk

awk '/pattern/' file

在您的情况下,将pattern更改为[a-f0-9-]{8}([a-f0-9-]{4}){3}[a-f0-9-]{12},可能需要使用\来转义[

答案 1 :(得分:3)

你想要这个吗?

AWK:

kent$  echo '/dev/sda6: UUID="c6e3ce88-f44e-4261-9178-042db8423081" TYPE="ext3"'|awk -F'UUID="|" ' '{print $2}'
c6e3ce88-f44e-4261-9178-042db8423081

sed的:

kent$  echo '/dev/sda6: UUID="c6e3ce88-f44e-4261-9178-042db8423081" TYPE="ext3"'|sed -r 's/.*UUID="([^"]*).*"/\1/g'
c6e3ce88-f44e-4261-9178-042db8423081

答案 2 :(得分:1)

blkid | sed -nr 's/^.+UUID="(.*?)" .+$/\1/p'

答案 3 :(得分:0)

Awk和sed解决方案:

$ blkid /dev/sda2 | sed -e 's/.*UUID="\([0-9A-F]*\).*/\1/'
16A42BA2A42B837B

$ blkid /dev/sda2 | awk '{split($2, tmp, "=") ; print tmp[2]}'
"16A42BA2A42B837B"

$ blkid /dev/sda2 | awk -F'UUID="|"' '{print $2}'
16A42BA2A42B837B

答案 4 :(得分:0)

使用sed:

sed -n 's/.*\(Pattern\).*/\1/p'

测试

  

echo“< TextValue> Start< / TextValue>”       < TextValue>开始< / TextValue>   echo“< TextValue> Start< / TextValue>” | sed -n's /。(开始)。 / \ 1 / p'       开始

答案 5 :(得分:0)

http://sed.sourceforge.net/sed1line.txt上有一个不错的sed单线列表。它建议了两种模拟grep的方法:

sed -n '/regexp/p'           # method 1
sed '/regexp/!d'             # method 2

/regexp/p打印与/regexp/匹配的行。 (需要使用-n标志来防止sed打印/重新打印每个处理过的行。)

/regexp/!d删除不匹配的每一行/regexp/,因此仅打印匹配的行。