繁体   English   中英

如何从开头删除bash中某个特定选定单词的文本?

[英]How can I remove text from start to some particular selected word in bash?

我有一个具有以下内容的file1.txt

time="2016-04-25T17:43:11Z" level=info msg="SHA1 Fingerprint=9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F"

我希望文件看起来如下:
9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F

我使用sed如下所示,将文件开头的文本删除到bash中选定的单词(“指纹”)。
sed 's/^.*Fingerprint=://'

它似乎不起作用,因此请建议使用正确的命令。 它可能会或可能不会

使用后引号匹配下一个双引号:

$ grep -Po '(?<=Fingerprint=)[^"]*' file
9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F

顺便说一句,你的sed命令是好的,你只需要删除多余的:在模式的结尾:

$ sed 's/^.*Fingerprint=//' file
9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F"

这将保留报价。 要摆脱它们,请匹配双引号:

$ sed 's/^.*Fingerprint=\([^"]*\)"$/\1/' file
9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F

提取Fingerprint值:

sed 's/.*Fingerprint=\([^"]*\)".*/\1/' file1.txt

输出:

9F:AD:D4:FD:22:24:20:A2:1E:0C:7F:D0:19:C5:80:42:66:56:AC:6F

Fingerprint=和引号之前的所有字符都将被捕获并输出。

您可以检查grep中的字符:

grep -Eo "([0-9A-F]{2}:){19}[0-9A-F]{2}" file1.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM