我想知道如何获得前两个“;”之间的字符串 在 Bash 中使用 sed ..
例如:
输入:
END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0;
输出:
startprocess -noprint
cut
救援:
cut -d';' -f2
$ cut -d';' -f2 <<< "END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0;"
startprocess -noprint
cut
可能是这里最好的选择,但这是如何在 bash 本身中完成的示例
IFS=';' read -r _ var _ <<<
'END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0;'
echo $var
sed
不是最好的解决方案,你最cut
好像 fedorqui 的回答那样,但如果你必须:
$ str='END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0;'
$ echo "$str" | sed 's/^[^;]*;\([^;]*\);.*$/\1/'
startprocess -noprint
您实际上不需要调用任何外部实用程序。这是纯 [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%%;*}"
使用 awk:
awk -F';' '{print $2}'
例子:
$ str='END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0;'
$ awk -F';' '{print $2}' <<< $str
startprocess -noprint