![](/img/trans.png)
[英]How to search for a string in a line, then delete to end of line from there
[英]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}'
或者带有cut
和rev
的管道也可以工作:
$ 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.