我使用sed
从输出中获取特定的字符串(0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738
)。此字符串位于Contract address:
旁边
这就是我目前正在尝试的。
更新: out有新行。
$ echo $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 -r "s/.*Contract address: (\w*).*/\1/")
$ echo "Address: $ADDRESS" # This is not working
我知道如何使用awk
获取合同地址,但在这种情况下,我必须使用sed
。
发布于 2022-05-25 07:23:32
您可以使用参数展开将字符串修剪到所需的值之前,然后再使用另一个从下一个空格修剪的字符串。
tail=${output#*Contract address: } # or Contact Hash: if that's what you actually meant
address=${tail%% *}
切线上,您的私有变量更喜欢小写;请参见正确Bash和shell脚本变量大写化
sed
不支持\w
,而且不管怎么说,当shell完全使用内部设施时,使用外部进程是浪费的。您的尝试也有缺陷,因为您通常应该引用你的变量,除非您特别要求shell对该值执行空白标记化和通配符扩展。
如果$output
确实包含在没有引用的情况下对其进行echo
编辑时模糊的换行符,那么您可能需要使用
tail=${output#*$'\n'Contract address: }
address=${tail%%$'\n'*}
发布于 2022-05-25 07:47:47
使用sed
$ address=$(sed -n '/^Contract address: \(.*\)/s//\1/p' <<< "$output")
$ echo "Address: $address"
Address: 0x0296cc83474725ddca19a9feefb3aec3602d9073688a4db6885695320cd2a738
发布于 2022-05-25 10:49:05
您可以使用
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
-打印成功替换的结果。见在线演示
#!/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
https://stackoverflow.com/questions/72372940
复制相似问题