首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给定一个短语,使用sed RegEx从多行语句中获取下一个字符串

给定一个短语,使用sed RegEx从多行语句中获取下一个字符串
EN

Stack Overflow用户
提问于 2022-05-25 06:39:26
回答 4查看 66关注 0票数 2

我使用sed从输出中获取特定的字符串(0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738)。此字符串位于Contract address:旁边

这就是我目前正在尝试的。

更新: out有新行。

代码语言:javascript
运行
复制
$ echo $output
代码语言:javascript
运行
复制
Starknet plugin using the active environment. 
Deploying contract.cairo/contract.json 
Deploy transaction was sent. 

Contract address: 0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738 
Transaction hash: 0x3f60551591f6abb9c79044ce15de4260eb169af2931abdc279e73f6428fc12d 
Succeeded
代码语言:javascript
运行
复制
$ ADDRESS=$(echo $output | sed -r "s/.*Contract address: (\w*).*/\1/")
$ echo "Address: $ADDRESS" # This is not working

我知道如何使用awk获取合同地址,但在这种情况下,我必须使用sed

EN

回答 4

Stack Overflow用户

发布于 2022-05-25 07:23:32

您可以使用参数展开将字符串修剪到所需的值之前,然后再使用另一个从下一个空格修剪的字符串。

代码语言:javascript
运行
复制
tail=${output#*Contract address: }  # or Contact Hash: if that's what you actually meant
address=${tail%% *}

切线上,您的私有变量更喜欢小写;请参见正确Bash和shell脚本变量大写化

sed不支持\w,而且不管怎么说,当shell完全使用内部设施时,使用外部进程是浪费的。您的尝试也有缺陷,因为您通常应该引用你的变量,除非您特别要求shell对该值执行空白标记化和通配符扩展。

如果$output确实包含在没有引用的情况下对其进行echo编辑时模糊的换行符,那么您可能需要使用

代码语言:javascript
运行
复制
tail=${output#*$'\n'Contract address: }
address=${tail%%$'\n'*}
票数 2
EN

Stack Overflow用户

发布于 2022-05-25 07:47:47

使用sed

代码语言:javascript
运行
复制
$ address=$(sed -n '/^Contract address: \(.*\)/s//\1/p' <<< "$output")
$ echo "Address: $address"
Address: 0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738
票数 1
EN

Stack Overflow用户

发布于 2022-05-25 10:49:05

您可以使用

代码语言:javascript
运行
复制
sed -rn 's/.*Contract address: ([^ ]*).*/\1/p'
sed -rE 's/.*Contract address: ([^ ]*).*/\1/p'

详细信息

  • 启用-rn / -En - POSIX语法,并禁止默认行输出行为
  • .*Contract address: ([^ ]*).*:正则表达式匹配任何文本,Contract address:,然后除空格之外的任何零或多个字符被捕获到第1组(\1)中,然后匹配字符串的其余部分
  • \1 -整个比赛被第一组取代
  • p -打印成功替换的结果。

在线演示

代码语言:javascript
运行
复制
#!/bin/bash
output='Starknet plugin using the active environment. Deploying contract.cairo/contract.json Deploy transaction was sent. Contract address: 0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738 Transaction hash: 0x3f60551591f6abb9c79044ce15de4260eb169af2931abdc279e73f6428fc12d Succeeded'
ADDRESS=$(echo $output | sed -rn 's/.*Contract address: ([^ ]*).*/\1/p')
echo "Address: $ADDRESS"
# => Address: 0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72372940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档