我想知道如何才能获得前两个之间的字符串“;”在Bash中使用sed ..
例如:
输入:
END; startprocess -noprint; CWD: 8995; RUID: nmsadm; EUID: nmsadm; ERRCODE: 0;
输出:
startprocess -noprint
答案 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