파일의 첫 번째 줄과 마지막 줄에 특정 문자열이 포함되어 있는지 확인하려고 합니다. 파일은 다음 형식을 따릅니다.
HEADER 2016-11-7
...
TOTAL IS: 20938
HEADER
첫 번째 줄에 문자열이 포함되어 있는지 확인한 다음 제거 하려고합니다 . 나는 가지고있다:
#get first line of file
header=`head -n +1 rubbish.txt`
echo $header
#If first line contains header, remove it and ouput it to new file
case "HEADER" in
*"$header"*) tail -n +2 rubbish.txt > rubbish.txt.out
header="TRUE"
;;
*) echo no HEADER present ;;
esac
출력:
HEADER 10-10-2019
no HEADER present
왜 제목이 없다고 나오나요?
답변1
word
; 을(를) 바꾸었으므로 pattern
다음과 같은 것을 원합니다:
...
case "$header" in
HEADER*) tail -n +2 rubbish.txt > rubbish.txt.out
header="TRUE"
;;
*) echo no HEADER present ;;
esac
...
목표를 달성하는 또 다른 방법은 sed
헤더 행이 있는 경우에만 헤더 행을 제거하는 것입니다( -i
여기서 내부 편집을 위해 GNU 확장 사용).
sed -i '1{/^HEADER/d}' rubbish.txt
$
파일의 마지막( ) 줄에 있는 잠재적인 바닥글 줄의 유사한 예:
sed -i '${/^TOTAL IS:/d}' rubbish.txt
답변2
잘못된 사용법 case
. if
와일드카드 문자와 함께 사용됩니다.
if [[ "$(head -n +1 rubbish.txt)" =~ "HEADER" ]]; then
tail -n +2 rubbish.txt > rubbish.txt.out
else echo no HEADER present
fi