如何将多行字符串修剪为最多 n 行

Bil*_*eer 3 linux bash awk

我有一个很长的多行输入字符串,位于局部变量 $INPUT 中,例如:

a
b
c
d
e
f
Run Code Online (Sandbox Code Playgroud)

如何将其修剪为最多 n 行,假设 n=3,并在末尾添加一条消息:

a
b
c
... message too long
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的,不适用于多行:

$OUTPUT=$('$INPUT' | awk '{print substr($0, 1, 15) "...")
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

怎么样

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

或者

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}')
Run Code Online (Sandbox Code Playgroud)

POSIXly

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

或使用 GNU sed:

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