Найдите строку и добавьте к нижней части файла

Вообще, для программного обеспечения Unix в целом, пользовательские настройки (в данном случае ~/.ssh/config) будут иметь больший приоритет над общесистемными настройками (в данном случае /etc/hosts); таким образом, настройки в ~/.ssh/config будут иметь больший приоритет.

0
23.04.2015, 18:31
3 ответа

Не ясно, всегда ли присутствует 99999999 или во входном файле может быть более одного такого экземпляра. Итак, вот версия sed, которая обслуживает все эти ситуации.
Обновление входного файла на месте см. в man sed (опция -i).

sed -n '/9999999999/{H;b n}; p; :n; ${g;s/\n//p}' file
0
28.01.2020, 02:36

С помощью awk можно сделать:

awk '
  /PATTERN/ { save = $0 ; next }
  { print }
  END { print save }
' infile > outfile

, где нужно заменить PATTERN на фактический шаблон и in file является вашим файлом данных; переименовать его соответствующим образом.

Код работает следующим образом:

/PATTERN/ { save = $0 ; next } - если шаблон найден, сохраните эту строку для последующего использования и пропустите печать (поэтому она удалена с этого места)

{ print } - печатает те строки в файле, которые не были пропущены предыдущей командой

END { print save } - наконец, когда все строки будут обработаны, добавьте сохраненную строку, ту, где шаблон совпал


Если вы хотите перезаписать исходный файл новым файлом, добавьте команду mv после сценария awk:

mv outfile infile

снова с соответствующими выбранными именами файлов.

1
28.01.2020, 02:36

Другое sed решение

sed -i '
        /9999999999/{h;d};           # move match string in hold space
        $G;                          # append string from hold space to end
        s/\n$//                      # avoid empty line if pattern have not met 
       ' BADINS0000001065_0000000000*
1
28.01.2020, 02:36

Теги

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