Как получить первую строку входного текстового файла, удалив эту строку из текстового файла

JBoss - это сервер приложений, фреймворк для запуска приложений/сервлетов на базе Java. Поэтому удаление этого /opt/jboss-xxx наверняка означает удаление всего приложения (в зависимости от конфигурации вашего сервера)

см. JBoss Enterprise Application Platform

JBoss, вероятно, запущен, и, как обычно, у вас он забит логами. Серверы приложений также нуждаются в регулярной очистке и обслуживании, особенно когда речь идет об уходе за логами (настроенная ротация логов или очистка их заданиями cron).

Ваша команда ps/grep может не сработать, потому что grep чувствителен к регистру. Я бы порекомендовал:

ps -uax | egrep -i "jboss|java"

Процесс JBoss также может быть мертв, потому что место для логов исчерпано.

Что касается журналов, я бы рекомендовал регулярно выполнять задание cron, очищая журналы с давностью более 2 месяцев (фактически 60 дней), как в:

find /opt/jboss-6.1.0/server/all/log -type f -mtime +60 -exec rm {} \;

Соответствующая ссылка:

Delete Files Older Than x Days on Linux

Оговорка: такая очистка журналов должна быть частью политики регулярного резервного копирования.

11
25.02.2017, 05:26
7 ответов
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

или

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

или, меньше набирая:

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'
13
27.01.2020, 19:56

Используя голову и хвост. Файл - target.txt

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

Примечание. Убедитесь, что в текущей папке нет файла tmp, иначе он будет удален.

Объяснение:

  • «head -1» выбирает первую строку
  • «tail -n + 2 target.txt> tmp» выбирает все строки, начиная со второй (включая) и помещает их в tmp
  • mv перезаписывает исходный файл с помощью tmp
  • rm tmp удалит созданный таким образом файл tmp
1
27.01.2020, 19:56
sed -ne '1p' -e '1!s/^//w temp_file' yourfile && mv temp_file yourfile
5
27.01.2020, 19:56

По крайней мере, с GNU sed:

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

С GNU sed может быть записан как однострочный

sed -i -e '1 {w /dev/stdout' -e 'd}' file
10
27.01.2020, 19:56

Вы можете использовать голову , хвост и mv :

Отображение первой строки:

head -1 myPathToTheFile.txt

Сохранение последней ( +2 ) строки:

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt
2
27.01.2020, 19:56

Использование файловых дескрипторов и немного python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1
1
27.01.2020, 19:56

Предполагая, что вы просите сценарий оболочки, это сделает то, что вы просили:

NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME
6
27.01.2020, 19:56

Теги

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