Перечислить все версии пакетов и установить эти точные версии в другой системе?

Итак, вы действительно хотите отменить каждое слово, а не каждое предложение, правильно? Или ваша запятая должна быть периодом?

perl -pe 's/(\w+)/ reverse $1 /eg' << END
DCBA. HGFE.GI
MLK,PON.RQ
UTS. ZYXWV. 321
END
ABCD. EFGH.IG
KLM,NOP.QR
STU. VWXYZ. 123

Если вы хотите перенаправить, сделайте следующее:

perl -pe 's/(\w+)($|\W+)/ reverse($1) . $2 /eg' < file_in > file_out

В моем примере сделайте [!d3 ]

perl -pe 's/(\w+)($|\W+)/ reverse($1) . $2 /eg' << END > file_out

НЕ помещайте перенаправление в ту же строку, что и завершающее слово heredoc. Если вы это сделаете, оболочка не сможет найти конец heredoc.

С перенаправлением в и из файлов никогда не делайте этого: command < file > file с тем же файлом. Перераспределение происходит до запуска команды, а > обрезает файл до нулевой длины. Когда команда запускается, входной файл уже был уничтожен.

1
задан 22 December 2017 в 09:13

3 ответа

Один из способов сделать это - создать файл списка с помощью команд установки. Следующая команда создаст файл, содержащий команды, сообщающие apt-get, какую версию устанавливаемого приложения:

dpkg -l | tail -n +6 | awk '{print $2"="$3}' | while read pkg; do echo "sudo apt-get install $pkg" >> install_pkg; done

Я поставил вышеприведенную команду, чтобы пропустить первые 6 строк из dpkg -l, поскольку они информационные линии, которые превращаются в мусорные линии. Я также не добавлял команду -y в команду apt-get, чтобы она не автоматически устанавливала приложение, которое вы не хотели устанавливать. Я могу оставить это до вас. Когда я проверил, будет ли это работать или нет, я добавил в -s для имитации установки после команды apt-get в команде и, похоже, сработал.

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

sudo apt-get install y-ppa-manager=2017.06.13-1~webupd8~0
sudo apt-get install yad=0.39.0-1~webupd8~xenial0
sudo apt-get install yelp=3.20.1-1ubuntu1~xenial1
sudo apt-get install yelp-xsl=3.20.1-1~ubuntu16.04.1~xenial1
sudo apt-get install youtube-screenlet=0.3.2+++~trusty1
sudo apt-get install zeitgeist=0.9.16-0ubuntu4
sudo apt-get install zeitgeist-core=0.9.16-0ubuntu4
sudo apt-get install zeitgeist-datahub=0.9.16-0ubuntu4
sudo apt-get install zenity=3.20.0-1~ubuntu16.04.1
sudo apt-get install zenity-common=3.20.0-1~ubuntu16.04.1
sudo apt-get install zip=3.0-11
sudo apt-get install zlib1g:amd64=1:1.2.8.dfsg-2ubuntu4.1
sudo apt-get install zlib1g:i386=1:1.2.8.dfsg-2ubuntu4.1
sudo apt-get install zlib1g-dev:amd64=1:1.2.8.dfsg-2ubuntu4.1
sudo apt-get install zsync=0.6.2-1ubuntu1

Тогда все, что вы должно быть сделано, чтобы скопировать файл install_pkg, который был создан в другую систему, учитывая, что все PPA на другой системе соответствуют системе, в которой вы находитесь, и выполните следующую команду для запуска установки:

sh ./install_pkg

Надеюсь, это поможет!

2
ответ дан 22 May 2018 в 15:59
  • 1
    Я просто протестировал один, где вы поместили все имена приложений в текстовый файл, а затем вызовите с помощью apt-get, но проблема в том, что слишком много приложений указано, поэтому буфер для apt-get заполняется и выходит из строя. – Terrance 22 December 2017 в 21:21

Один из способов сделать это - создать файл списка с помощью команд установки. Следующая команда создаст файл, содержащий команды, сообщающие apt-get, какую версию устанавливаемого приложения:

dpkg -l | tail -n +6 | awk '{print $2"="$3}' | while read pkg; do echo "sudo apt-get install $pkg" >> install_pkg; done

Я поставил вышеприведенную команду, чтобы пропустить первые 6 строк из dpkg -l, поскольку они информационные линии, которые превращаются в мусорные линии. Я также не добавлял команду -y в команду apt-get, чтобы она не автоматически устанавливала приложение, которое вы не хотели устанавливать. Я могу оставить это до вас. Когда я проверил, будет ли это работать или нет, я добавил в -s для имитации установки после команды apt-get в команде и, похоже, сработал.

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

sudo apt-get install y-ppa-manager=2017.06.13-1~webupd8~0 sudo apt-get install yad=0.39.0-1~webupd8~xenial0 sudo apt-get install yelp=3.20.1-1ubuntu1~xenial1 sudo apt-get install yelp-xsl=3.20.1-1~ubuntu16.04.1~xenial1 sudo apt-get install youtube-screenlet=0.3.2+++~trusty1 sudo apt-get install zeitgeist=0.9.16-0ubuntu4 sudo apt-get install zeitgeist-core=0.9.16-0ubuntu4 sudo apt-get install zeitgeist-datahub=0.9.16-0ubuntu4 sudo apt-get install zenity=3.20.0-1~ubuntu16.04.1 sudo apt-get install zenity-common=3.20.0-1~ubuntu16.04.1 sudo apt-get install zip=3.0-11 sudo apt-get install zlib1g:amd64=1:1.2.8.dfsg-2ubuntu4.1 sudo apt-get install zlib1g:i386=1:1.2.8.dfsg-2ubuntu4.1 sudo apt-get install zlib1g-dev:amd64=1:1.2.8.dfsg-2ubuntu4.1 sudo apt-get install zsync=0.6.2-1ubuntu1

Тогда все, что вы должно быть сделано, чтобы скопировать файл install_pkg, который был создан в другую систему, учитывая, что все PPA на другой системе соответствуют системе, в которой вы находитесь, и выполните следующую команду для запуска установки:

sh ./install_pkg

Надеюсь, это поможет!

2
ответ дан 18 July 2018 в 00:40

Один из способов сделать это - создать файл списка с помощью команд установки. Следующая команда создаст файл, содержащий команды, сообщающие apt-get, какую версию устанавливаемого приложения:

dpkg -l | tail -n +6 | awk '{print $2"="$3}' | while read pkg; do echo "sudo apt-get install $pkg" >> install_pkg; done

Я поставил вышеприведенную команду, чтобы пропустить первые 6 строк из dpkg -l, поскольку они информационные линии, которые превращаются в мусорные линии. Я также не добавлял команду -y в команду apt-get, чтобы она не автоматически устанавливала приложение, которое вы не хотели устанавливать. Я могу оставить это до вас. Когда я проверил, будет ли это работать или нет, я добавил в -s для имитации установки после команды apt-get в команде и, похоже, сработал.

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

sudo apt-get install y-ppa-manager=2017.06.13-1~webupd8~0 sudo apt-get install yad=0.39.0-1~webupd8~xenial0 sudo apt-get install yelp=3.20.1-1ubuntu1~xenial1 sudo apt-get install yelp-xsl=3.20.1-1~ubuntu16.04.1~xenial1 sudo apt-get install youtube-screenlet=0.3.2+++~trusty1 sudo apt-get install zeitgeist=0.9.16-0ubuntu4 sudo apt-get install zeitgeist-core=0.9.16-0ubuntu4 sudo apt-get install zeitgeist-datahub=0.9.16-0ubuntu4 sudo apt-get install zenity=3.20.0-1~ubuntu16.04.1 sudo apt-get install zenity-common=3.20.0-1~ubuntu16.04.1 sudo apt-get install zip=3.0-11 sudo apt-get install zlib1g:amd64=1:1.2.8.dfsg-2ubuntu4.1 sudo apt-get install zlib1g:i386=1:1.2.8.dfsg-2ubuntu4.1 sudo apt-get install zlib1g-dev:amd64=1:1.2.8.dfsg-2ubuntu4.1 sudo apt-get install zsync=0.6.2-1ubuntu1

Тогда все, что вы должно быть сделано, чтобы скопировать файл install_pkg, который был создан в другую систему, учитывая, что все PPA на другой системе соответствуют системе, в которой вы находитесь, и выполните следующую команду для запуска установки:

sh ./install_pkg

Надеюсь, это поможет!

2
ответ дан 24 July 2018 в 17:16

Другие вопросы по тегам:

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