学习sed,无法在值

时间:2016-05-29 21:19:12

标签: bash sed

我有一个包含文字的文件,如下所示:

ssid="sdfsdf" #psk="sdfsfsdf" psk=zzzs93j03r093ur0fjfs39uj }

我正在学习sed并希望用它来提取以zzz开头的字符串。

我虽然可以抓住“psk =”和“}”之间的所有内容,但这似乎不起作用:

sed 's_ psk=\(.*\) }_\1_' /tmp/myfile

我也很好奇为什么它不起作用。 psk两次出现在文本中,但我搜索“psk”会将其与“#psk”

区分开来

2 个答案:

答案 0 :(得分:1)

使用GNU sed:

sed 's/.* psk=\([^ ]*\).*/\1/' file

输出:

zzzs93j03r093ur0fjfs39uj

请参阅:The Stack Overflow Regular Expressions FAQ

答案 1 :(得分:0)

您的命令运行正常,它取代了psk=...$zzzs...之间的所有内容,您要添加的内容为.*

% sed 's_.* psk=\(.*\) }_\1_'
zzzs93j03r093ur0fjfs39uj

您可以稍微更改正则表达式,以处理psk不在最后的情况:

sed 's/.*[^#]psk=\([[:alnum:]]*\).*/\1/'