여러 줄 문자열을 최대 n 줄로 자르는 방법

여러 줄 문자열을 최대 n 줄로 자르는 방법

로컬 변수 $INPUT에 긴 여러 줄 입력 문자열이 있습니다. 예를 들면 다음과 같습니다.

a
b
c
d
e
f

최대 n 줄로 자르는 방법(n=3이라고 가정하고 끝에 메시지를 추가)

a
b
c
... message too long

이것은 내가 가지고 있는 것인데 여러 줄에서는 작동하지 않습니다.

$OUTPUT=$('$INPUT' | awk '{print substr($0, 1, 15) "...")

답변1

어때요?

output=$(echo "$input" | awk -v n=3 'NR>n {print "... message too long"; exit} 1')

또는

output=$(echo "$input" | sed -e '3{a\... message too long' -e 'q}')
output=$(echo "$input" | sed -e '3{$!N;s/\n.*/\n... message too long/' -e 'q}')

POSIX적으로

output=$(echo "$input" | sed -e '3{
  $!N
  s/\n.*/\n... message too long/
  q
  }')

또는 GNU sed를 사용하십시오:

output=$(echo "$input" | sed -e '4{i\... message too long' -e 'Q}')    

답변2

OUTPUT=$(echo "$INPUT" | perl -pe '1..3 or exit')

답변3

나는 이것을 제안한다:

# convert the variable into an array
$ mapfile -t arr < <(echo "$INPUT")
# use printf and slice the array into the fisrt three elements
$ printf "%s\n" "${arr[@]:0:3}" "... message too long"
a
b
c
... message too long

관련 정보