OS/Linux
Shell script 문자열 앞뒤 공백 지우기 (trim)
호형
2020. 6. 17. 15:22
지난번에 "Jenkins에서 Build FAILURE 시 특정 위치에 로그남기기"를 하며 거기에서 사용된 Shell Script가 있다.
여기에 나온 Shell Script 는 다음과 같다.
#! /bin/bash
jobstatus=$(cat /app/cqm/mbr/ci/log/jenkins.log | tail -1 | cut -f 3 -d':')
if [ "${jobstatus:1}" == "FAILURE" ];then
jobname=$(cat jenkins.log | tail -1 | cut -f 2 -d':' | cut -f 1 -d'#')
trimjobname=${jobname:1:-1}
echo ${trimjobname}" is Failed"
cat /app/cqm/mbr/ci/data/jobs/"${trimjobname}"/builds/lastFailedBuild/log
cat /app/cqm/mbr/ci/data/jobs/"${trimjobname}"/builds/lastFailedBuild/log >> /app/logs/qms/jenkins/error_`date +%Y%m%d%H%M`_"${trimjobname}".log
else
echo "success"
fi
여기서 7 line의 trimjobname 을 구하는 과정에서
trimjobname=${jobname:1:-1}
이렇게 간단히 구현을 할수 있었다. 해석하자면 jobname의 1번째부터 뒤에서 1번째까지를 가져와라 라는 뜻이다. 물론 0번째가 존재해서 실제로는 문자열의 2번째 글자부터라고 이해하면 된다. ' abcdefg ' 라고 있으면 'abcdefg' 로 앞뒤 공백을 제거하고 순수 문자열만 가지고 오는것이다. 하지만 이게 os에 따라 안되는 경우가 있다. -1을 인식을 못하는데 ${jobname:1: -1} 이처럼 -1 앞에 공백을 한칸 줘보라는 글도 있어서 해봤는데 마찬가지로 먹히지 않는다. 또한 앞뒤 공백 제거를 위해 ${jobname} | sed -e 's/^ *//g' -e 's/ *$//g' 이렇게도 써봤는데 먹히지를 않았다.
그래서 약간 방법을 달리 해서 해결을 했다.
jobnamelength=${#jobname}
trimjobname=${jobname:1:jobnamelength-2}
위의 trimjobname=${jobname:1:-1} 이거 한줄 대신에 이렇게 두줄로 풀어서 -1을 하지 않게 만들었다. 이렇게 바꾸니 잘 된다. shell에서 문자열의 길이를 구할때는 위처럼 ${#문자열} 으로 구할 수 있다.
끝!