Вы можете использовать sed
для этого:
$ sed -E 's/^[^[:space:]]*[[:space:]](.*)[[:space:]][^[:space:]]*$/\1/' file
THIS IS A DESCRIPTION
SHORTER DESC
DESC
Или с awk:
$ awk '{$1=$NF=""; sub(/^[ \t]*/,"")}1' file
# same output
Вы также можете использовать cut
и rev
для удаления первого ипоследние поля:
$ cut -d ' ' -f2- file | rev | cut -d ' ' -f2- | rev
# same output
Или GNU grep:
$ grep -oP '^\H+\h\K(.*)(?=\h+\H+$)' file
# same output
Или с циклом Bash и расширением параметра :
$ while read -r line; do line="${line#* }"; echo "${line% *}"; done <file
# same output
Или, если вы хотите захватить поля как переменные в Bash:
while IFS= read -r line; do
date="${line%% *}"
amt="${line##* }"
line="${line#* }"
desc="${line% *}"
printf "%5s %10s \"%s\"\n" "$date" "$amt" "$desc"
done <file
Prints:
01/01 123.45 "THIS IS A DESCRIPTION"
12/23 9.00 "SHORTER DESC"
11/16 1,234.00 "DESC"