学习 sed,在提取值之间的文本时遇到问题



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

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/'

相关内容

  • 没有找到相关文章

最新更新