Эти команды:
screen -X readbuf /home/nitro/file
screen -X writebuf
cat /tmp/screen-exchange
не действуют как части конвейера, но ваша составная команда пытается обработать их таким образом. То есть каждый шаг не считывает стандартный вывод предыдущего шага, поэтому между ними меньше причинно-следственная связь, чем если бы вы набрали
screen -X readbuf /home/nitro/file; screen -X writebuf; cat /tmp/screen-exchange
или
screen -X readbuf /home/nitro/file && screen -X writebuf && cat /tmp/screen-exchange
sed
обратные ссылки имеют вид \1
, \2
и т. д. $1
больше похож на Perl -. Кроме того, при использовании базовых регулярных выражений (BRE )необходимо экранировать круглые скобки (...)
, образующие группу, а также ?
и +
. Или вы можете использовать расширенные регулярные выражения с опцией -E
.
Обратите внимание, что регулярные выражения sed являются жадными, поэтому <.*>
будет соответствовать <h> PIDAT <h>
в этой строке, вместо того, чтобы останавливаться на первом >
. А .*?
не имеет смысла(.*
уже ничего не может сопоставить, поэтому делать его необязательным через ?
не нужно ).
Это может сработать:
sed -i -Ee 's/^(<[^>]*>).*/\1/' *.conll
[^>]
соответствует всему, кроме >
, поэтому <[^>]*>
будет соответствовать <h>
, но не <h> PIDAT <h>
.