Ошибка в команде wc для чтения количества строк в файле

Буферизация будет проблемой, так как scalaможет использовать буферизацию на основе блоков -из-за конвейера (вместо буферизации на основе терминальной линии -по умолчанию, см. setvbuf(3)), а также буферизацию, выполняемуюsed(или что-то еще в процессе разработки ). Вы можете попробовать налепить stdbufна все подряд, отказаться от портативности и молиться, чтобы эти LD_PRELOADобезьяньи патчи работали; другой вариант вместо этого может состоять в том, чтобы запустить REPL под PTY, передать ему пользовательский ввод и заменить вывод перед его отправкой. Это здесь показывает SBCL, так как scalaвосхитительно не работал -на моей машине.

$./mochanichize sbcl 
This is SBCL 1.3.20, an implementation of ANSI Common Lisp.
More information about SBCL is available at .

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
* (print "Java")

"Mocha" 
"Mocha"
* (exit)
$ 

И код для mochanichize.

#!/usr/bin/env expect

package require Tcl 8.5

proc mochanichize {fh} {
   global godot
   set somedata [read $fh]
   if {[eof $fh]} { close $fh; set godot 1; return; }
   regsub -all {\mJava\M} $somedata {Mocha} somedata
   puts -nonewline $somedata
}

proc sendtoprog {from to} {
   # TODO support ^D but that's more complicated
   puts -nonewline $to [read $from]
}

# no echo on PTY command we're running (soas not to duplicate what is
# echo'd back to the user via the user tty)
set stty_init -echo

if {[catch {spawn -noecho {*}$argv} err]} { puts stderr $err; exit 1 }

chan configure $spawn_id -blocking 0 -buffersize 1
chan event $spawn_id readable [list mochanichize $spawn_id]

chan configure stdin -blocking 0 -buffersize 1
chan configure stdout -blocking 0 -buffersize 1
chan event stdin readable [list sendtoprog stdin $spawn_id]

# TODO better handle ^Z this goes all meh on it
trap SIG_IGN SIGTSTP

vwait godot

0
24.11.2019, 10:20
1 ответ

Это не совсем ответ, а то, что я делюсь личным микроинструментом, который часто использую для нормализовать текстовые файлы (txtnorm):

#!/usr/bin/perl -spi
our($s);
s/\n\r|\r\n|\n|\r/\n/g;                 ## normalize \n
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//;  ## remove BOM !
s/(?<=.)\z/\n/;                         ## ensure newline at eof

if($s){ s/\xC2\xA0/ /g }                ## -s non breaking spaces-> " "

txtnorm *.txtнормализует конец -строк -, обеспечивает новую строку в конце, удаляет спецификации и (с -s )может нормализовать неразрывные пробелы -.

Обязательно используйте его ТОЛЬКО для текстовых файлов.

1
28.01.2020, 02:14

Теги

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