2

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

4

6 回答 6

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}, 可能需要使用\escape [

于 2012-09-20T09:34:06.343 回答
3

你要这个?

awk:

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

赛德:

kent$  echo '/dev/sda6: UUID="c6e3ce88-f44e-4261-9178-042db8423081" TYPE="ext3"'|sed -r 's/.*UUID="([^"]*).*"/\1/g'
c6e3ce88-f44e-4261-9178-042db8423081
于 2012-09-20T09:33:38.350 回答
1
blkid | sed -nr 's/^.+UUID="(.*?)" .+$/\1/p'
于 2012-09-20T10:24:28.917 回答
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
于 2012-09-20T09:35:12.453 回答
0

使用 sed:

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

经过测试

echo "<TextValue> 开始</TextValue>" <TextValue> 开始</TextValue> echo "<TextValue> 开始</TextValue>" | sed -n's/. (开始)。/\1/p' 开始

于 2012-09-20T11:45:03.727 回答
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/,因此只打印匹配的行。

于 2018-10-01T19:43:07.060 回答