Как с помощью ed переместить последние 3 строки конвейера в начало вывода?

Для всех, кто сталкивается с подобной проблемой, в данном конкретном случае проблема была вызвана ошибкой в ​​виртуальной машине Ruby версии 1.27.4, которая была установлена ​​на этих облачных серверах как часть образа.

Ошибка RVM заключалась в сценариях, которые переопределяли обычные функции (, такие как cd ), где SIGINT перехватывался, но не освобождался при очистке. Более подробную информацию можно найти здесь Ошибка Ruby RVM

Исправление в этом случае заключалось в обновлении RVM до последней стабильной версии (, в данном случае 1.29.7 ).

curl -sSL https://get.rvm.io | bash -s stable --ruby

Спасибо mosvy за указатель.

6
12.07.2020, 14:16
1 ответ

Вы действительно наткнулись на оболочку , а не на изд. Это

echo -e "$-2,$m0\n,p\nQ"

означает, что $-и $m0подвергаются расширению параметров, так как они заключены в двойные кавычки. Запустите echo "$-"и echo "$m0", чтобы убедиться в этом. Они должны быть заключены в одинарные кавычки, чтобы оболочка не расширяла их.

Поскольку мы исправляем это, давайте также отдадим предпочтение printfнадecho. Последний имеет неравномерное -поведение в разных реализациях, в то время как первый является надежным. Это должно делать:

printf '%s\n' '$-2,$m0' ',p' 'Q' | ed -s <(program | awk...)
Опция

-sбыла добавлена ​​в ed, чтобы «подавить диагностику, подсчет байтов и '!' быстрый". Это чисто косметическое.

Пример выполнения (с бесполезным использованием cat для имитации замены процесса):

$ cat input
ATOM    126  CD  GLN A 449      -2.853  11.592 119.709  1.00 17.95           C
ATOM    127  OE1 GLN A 449      -4.056  11.297 119.695  1.00 20.83           O
ATOM    128  NE2 GLN A 449      -1.948  10.876 120.359  1.00 14.98           N
HETATM  129  N   MSE A 450      -4.523  16.830 119.280  1.00 14.88           N
HETATM  130  CA  MSE A 450      -5.537  17.804 118.911  1.00 15.65           C
$ printf '%s\n' '$-2,$m0' ',p' 'Q' | ed -s <(cat input)
ATOM    128  NE2 GLN A 449      -1.948  10.876 120.359  1.00 14.98           N
HETATM  129  N   MSE A 450      -4.523  16.830 119.280  1.00 14.88           N
HETATM  130  CA  MSE A 450      -5.537  17.804 118.911  1.00 15.65           C
ATOM    126  CD  GLN A 449      -2.853  11.592 119.709  1.00 17.95           C
ATOM    127  OE1 GLN A 449      -4.056  11.297 119.695  1.00 20.83           O
7
18.03.2021, 23:20

Теги

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