Bash 打印出前两个“;之间的字符串”;在狂欢节上

Bash 打印出前两个“;之间的字符串”;在狂欢节上,bash,sed,cut,Bash,Sed,Cut,我想知道如何使用Bash中的sed获得前两个“;”之间的字符串 例如: 输入: END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0; 输出: startprocess -noprint cut救援: cut -d';' -f2 试验 $cut-d';'-f2使用awk: awk -F';' '{print $2}' 例如: $ str='END; startprocess -nopr

我想知道如何使用Bash中的sed获得前两个“;”之间的字符串

例如:

输入:

END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;
输出:

startprocess -noprint

cut
救援:

cut -d';' -f2
试验
$cut-d';'-f2使用awk:

awk -F';' '{print $2}'
例如:

$ str='END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;'

$ awk -F';' '{print $2}' <<< $str
 startprocess -noprint
$str='END;startprocess-noprint;CWD:8995;鲁伊德:nmsadm;EUID:nmsadm;错误代码:0;'

$awk-F';''美元{print$2}'
sed
不是最好的解决方案,你最好像fedorqui的回答那样使用
cut
,但如果你必须:

$ str='END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;'
$ echo "$str" | sed 's/^[^;]*;\([^;]*\);.*$/\1/'
 startprocess -noprint

cut
可能是这里最好的选择,但这是一个如何在bash中实现这一点的示例

IFS=';' read -r _ var _ <<<
'END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;'
echo $var

IFS=';'read-r\uvar\up>您实际上不需要调用任何外部实用程序。下面是纯[tag_bash]中的一个简单解决方案:

x='END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;'
[[ $x =~ \;[^\;]+\; ]] && echo "${BASH_REMATCH:1:((${#BASH_REMATCH}-2))}"
输出:

 startprocess -noprint
或者更简单一点:

x=${x#*;}; echo "${x%%;*}"

谢谢你的快速回答!我猜您错过了
startprocess-noprint
echo$var
之后的输出+“这个解决方案是1”。@fedorqui,前几天我因为在答案中插入了输出而生气。因此,不确定这是否被视为如此糟糕的做法;-)哦,这对我来说是新的,@1_CR。我通常用这样的标签(bash、shell、awk、unix…)来显示我得到的确切输出。它通常对每个人都有帮助,甚至对回答者也有帮助,因为其他人可以建议更好的方法。@fedorqui,说得好。我将仿效你,勇敢地面对批评;-)@user2485962解决了你的问题吗?既然你是新来的,如果你的问题已经解决了,请别忘了把答案标为“接受”。看看你是否有任何疑问!谢谢你送我的头戴式软呢帽。
x=${x#*;}; echo "${x%%;*}"