我有一个包含文本的文件,如下所示:
ssid="sdfsdf" #psk="sdfsfsdf" psk=zzzs93j03r093ur0fjfs39uj }
我正在学习 sed,并希望使用它来提取以 zzz 开头的字符串。
我虽然我可以抓取" psk="和" }"之间的所有内容,但这似乎不起作用:
sed 's_ psk=(.*) }_1_' /tmp/myfile
我也很好奇为什么它不起作用。 psk 在文本中出现了两次,但我虽然搜索"psk"会将其与"#psk"区分开来
使用 GNU sed:
sed 's/.* psk=([^ ]*).*/1/' file
输出:
ZZZS93J03R093UR0FJFS39UJ
请参阅: 堆栈溢出正则表达式常见问题解答
您的命令工作正常,它将psk=...$
中的所有内容替换为zzzs...
,您要添加的内容.*
在前面:
% sed 's_.* psk=(.*) }_1_'
zzzs93j03r093ur0fjfs39uj
您可以稍微更改正则表达式以处理psk
不在末尾的情况:
sed 's/.*[^#]psk=([[:alnum:]]*).*/1/'