我想用sed打印匹配模式,例如:
我想得到uuid,所以我可以用这个:
blkid $1 | grep -o -E "[a-f0-9-]{8}([a-f0-9-]{4}){3}[a-f0-9-]{12}"
我该怎么做才能使用sed或awk?
答案 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/
,因此仅打印匹配的行。