在Bash中打印前两个“;”之间的字符串

时间:2013-06-14 12:14:20

标签: bash sed cut

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

例如:

输入:

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

输出:

startprocess -noprint

5 个答案:

答案 0 :(得分:5)

cut救援:

cut -d';' -f2

测试

$ cut -d';' -f2 <<< "END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm;  ERRCODE: 0;"
 startprocess -noprint

答案 1 :(得分:2)

cut可能是最好的选择,但这是一个如何在bash中完成的例子

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

答案 2 :(得分:1)

sed不是最好的解决方案,而且你最好使用cut和fedorqui的答案,但如果你必须:

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

答案 3 :(得分: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%%;*}"

答案 4 :(得分: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