我有一个包含文字的文件,如下所示:
ssid="sdfsdf" #psk="sdfsfsdf" psk=zzzs93j03r093ur0fjfs39uj }
我正在学习sed并希望用它来提取以zzz开头的字符串。
我虽然可以抓住“psk =”和“}”之间的所有内容,但这似乎不起作用:
sed 's_ psk=\(.*\) }_\1_' /tmp/myfile
我也很好奇为什么它不起作用。 psk两次出现在文本中,但我搜索“psk”会将其与“#psk”
区分开来答案 0 :(得分:1)
使用GNU sed:
sed 's/.* psk=\([^ ]*\).*/\1/' file
输出:
zzzs93j03r093ur0fjfs39uj
答案 1 :(得分:0)
您的命令运行正常,它取代了psk=...$
与zzzs...
之间的所有内容,您要添加的内容为.*
:
% sed 's_.* psk=\(.*\) }_\1_'
zzzs93j03r093ur0fjfs39uj
您可以稍微更改正则表达式,以处理psk
不在最后的情况:
sed 's/.*[^#]psk=\([[:alnum:]]*\).*/\1/'