0

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

例如:

输入:

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

输出:

startprocess -noprint
4

5 回答 5

5

cut救援:

cut -d';' -f2

测试

$ cut -d';' -f2 <<< "END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;"
 startprocess -noprint
于 2013-06-14T12:16:51.233 回答
2

cut可能是这里最好的选择,但这是如何在 bash 本身中完成的示例

IFS=';' read -r _ var _ <<<
'END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;'
echo $var
于 2013-06-14T12:28:01.283 回答
1

sed不是最好的解决方案,你最cut好像 fedorqui 的回答那样,但如果你必须:

$ str='END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;'
$ echo "$str" | sed 's/^[^;]*;\([^;]*\);.*$/\1/'
 startprocess -noprint
于 2013-06-14T12:19:03.023 回答
1

您实际上不需要调用任何外部实用程序。这是纯 [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%%;*}"
于 2013-06-14T12:41:36.307 回答
0

使用 awk:

awk -F';' '{print $2}'

例子:

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

$ awk -F';' '{print $2}' <<< $str
 startprocess -noprint
于 2013-06-14T12:17:04.683 回答