$ 1 не работает с SED

Эти команды:

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
3
05.07.2018, 08:16
1 ответ

sedобратные ссылки имеют вид \1, \2и т. д. $1больше похож на Perl -. Кроме того, при использовании базовых регулярных выражений (BRE )необходимо экранировать круглые скобки (...), образующие группу, а также ?и +. Или вы можете использовать расширенные регулярные выражения с опцией -E.

Обратите внимание, что регулярные выражения sed являются жадными, поэтому <.*>будет соответствовать <h> PIDAT <h>в этой строке, вместо того, чтобы останавливаться на первом >. А .*?не имеет смысла(.*уже ничего не может сопоставить, поэтому делать его необязательным через ?не нужно ).

Это может сработать:

sed -i -Ee 's/^(<[^>]*>).*/\1/' *.conll

[^>]соответствует всему, кроме >, поэтому <[^>]*>будет соответствовать <h>, но не <h> PIDAT <h>.

11
27.01.2020, 21:15

Теги

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