繁体   English   中英

如何从一行中搜索和删除模式?

[英]How to search and delete a pattern from a line?

我需要编写一个带有文本行的简单 bash 脚本

some-pattern something-else

并擦除一些模式并仅返回其他内容。 我写了一个脚本来用 grep -o 做相反的事情,但我不知道如何处理这种情况。 很感谢任何形式的帮助。

样本输入:

"SNMPv2::sysLocation.0 = STRING: someLocation" 

期望输出:

"someLocation"

考虑到"不在您的示例 Input_file 和预期输出中,您能否尝试使用 GNU grep跟随。

grep -oP '.*STRING: \K(.*)' Input_file
someLocation

对于\\K解释:

\\K 是正则表达式语法的 PCRE 扩展,在该点之前丢弃内容,使其不包含在匹配输出中

您可以使用sed删除您要保留的内容前面的部分。

鉴于:

$ echo "$s"
"SNMPv2::sysLocation.0 = STRING: someLocation"

你可以做:

$ echo "$s" | sed -nE 's/^.*(someLocation)/\1/p'
someLocation

如果你想添加引号:

$ echo "$s" | sed -nE 's/^.*(someLocation)/"\1"/p'
"someLocation"

如果STRING:之后的部分是可变的,而不是固定的,则可以使用STRING:和捕获锚点:

$ echo "$s" | sed -nE 's/^.*STRING:[[:space:]]*(.*)/"\1"/p'
"someLocation"

或者, sed捕获并打印最后一个空格后的最后一个单词:

$ echo "$s" | sed -nE 's/([^[:space:]]*$)/\1/p'

如果最后一个单词与其他字段有空格,您也可以使用awk

$ echo "$s" | awk '{print $NF}'

或者带有cutrev的管道也可以工作:

$ echo "$s" | rev | cut -d' ' -f 1 | rev

您可以使用: echo ${STRING} | awk -F" " '/someLocation/ { print $NF }' echo ${STRING} | awk -F" " '/someLocation/ { print $NF }' -F将使用空格(由双引号表示,它们之间有空格)作为分隔符; /someLocation/将搜索您的位置; { print $NF }将显示字符串的最后一部分(我相信这是 location 所在的地方。

暂无
暂无

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

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