Как использовать `while read` (Bash) для чтения последней строки в файле, если в конце нет новой строки файла?

В Swift 3.0

extension String
{   
    func trim() -> String
   {
    return self.trimmingCharacters(in: CharacterSet.whitespaces)
   }
}

И вы можете позвонить

let result = " Hello World ".trim()  /* result = "Hello World" */
48
задан Mathias Bynens 26 June 2012 в 16:37
поделиться

2 ответа

@ Ответ Netcoder хорош, эта оптимизация устраняет ложные пустые строки, а также позволяет последней строке не иметь новой строки, если так было в оригинале.

DONE=false
NL=
until $DONE ;do
if ! read ; then DONE=true ; NL='-n ';fi
echo $NL$REPLY
done

Я использовал вариант этого, чтобы создать 2 функции, чтобы позволить конвейерную передачу текста, который включает '[', чтобы держать grep счастливым. (вы можете добавить другие переводы)

function grepfix(){
    local x="$@";
    if [[ "$x" == '-' ]]; then
      local DONE=false
      local xx=
      until $DONE ;do
         if ! IFS= read ; then DONE=true ; xx="-n "; fi
         echo ${xx}${REPLY//\[/\\\[}
      done
    else
      echo "${x//\[/\\\[}"
    fi
 }


 function grepunfix(){
    local x="$@";
    if [[ "$x" == '-' ]]; then
      local DONE=false
      local xx=
      until $DONE ;do
         if ! IFS= read ; then DONE=true ; xx="-n "; fi
         echo ${xx}${REPLY//\\\[/\[}
      done
    else
      echo "${x//\\\[/\[}"
    fi
 }

(передача - поскольку $ 1 включает pipe, в противном случае просто переводит аргументы)

0
ответ дан 26 November 2019 в 19:00
поделиться

Вместо читать , попробуйте использовать GNU Coreutils , например tee , cat и т. Д.

из стандартного ввода

readvalue=$(tee)
echo $readvalue

из файла

readvalue=$(cat filename)
echo $readvalue
3
ответ дан 26 November 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: