我试图从字符串中删除某些值。它按照第一列的预期工作,但是当我尝试第二列时,它没有给出所需的输出。
代码和输出
[psatav]$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f1
$$JOB_ESTD_TIME1='2016-04-16 00:00:00'
[psatav]$ echo '$$JOB_ESTD_TIME2'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f2
'2016-04-16 20:00:00'
第二个命令应该返回: -
$$JOB_ESTD_TIME2='2016-04-16 20:00:00'
答案 0 :(得分:3)
OP中的cut
命令无法正常工作,您可以像multiple delimiters
一样使用awk
: -
awk -F'[=|]' '{gsub(/ /, "", $2); printf "%s=%s\n", $1, $2}'
awk -F'[=|]' '{gsub(/ /, "", $3); printf "%s=%s\n", $1, $3}'
对于您的情况,
$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F'[=|]' '{ gsub(/ /, "", $2);printf "%s=%s\n", $1, $2 }'
$$JOB_ESTD_TIME1='2016-04-16 00:00:00'
$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F'[=|]' '{ gsub(/ /, "", $3);printf "%s=%s\n", $1, $3 }'
$$JOB_ESTD_TIME1='2016-04-16 20:00:00'
在将每个字段传递给gsub
之前,使用printf
删除空格。
答案 1 :(得分:2)
你正在做的是将$$JOB_ESTD_TIME1='2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'
整个字符串传递给cut,所以对于f1它会剪切
$$JOB_ESTD_TIME1='2016-04-16 00:00:00'
并且对于f2,它仅剪切'2016-04-16 20:00:00'
如果您不想使用awk并坚持切割,那么您应该做什么
echo '$$JOB_ESTD_TIME2'=$(echo "'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f2)
$$JOB_ESTD_TIME2= '2016-04-16 20:00:00'
echo '$$JOB_ESTD_TIME2'=$(echo "'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f1)
$$JOB_ESTD_TIME2='2016-04-16 00:00:00'
答案 2 :(得分:1)
您要将cut
的分隔符设置为|
,因此-f1
会在第一个|
之前剪切所有内容并打印所需的输出。
但是-f2
会在第一个和第二个|
之间剪切数据,这就是你得到的。
您可以使用以下awk
命令获取所需的输出:
bash-4.1$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F"=" '{
split($2,a,"|"); print $1,"=",a[1]}'
$$JOB_ESTD_TIME1 = '2016-04-16 00:00:00'
bash-4.1$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F"=" '{
split($2,a,"|"); print $1,"=",a[2]}'
$$JOB_ESTD_TIME1 = '2016-04-16 20:00:00'
-F"="
参数将分隔符设置为=
,因此$1
将包含
$$JOB_ESTD_TIME1
。 split
函数拆分$2
(其余为
=
之后的数据并将其存储在数组a
中。print
打印出来
数组中的必填字段。