Siento que algo anda mal con el siguiente método. Solo pensé que lo mantendría aquí:
Resolví el problema creando un enlace simbólico con dicho comando:
sudo ln -svf /home/me/etc/systemd/system/report.service /etc/systemd/system/report.service
También se debe agregar la siguiente línea a la sección [Service]
dereport.service
:
After=home.mount
... para asegurarse de que home
esté montado.
Это можно сделать из командной строки терминала с помощью простого сценария bash. Первый цикл по содержимому файла . Затем для каждой строки передайте эхо в awk и пусть awk извлечет второй столбец . Наконец, перенаправьте этот текст в новый файл.
Собираем все вместе:
while read line; do
echo $line | awk '{print $2}' >> new_file.txt
done <old_file.txt
Первый шаг: удалить все слова, кроме второго, в каждой строке. Это довольно простая :%norm
команда:
:%norm dwwhD
Это похоже на ввод dwwhD
вручную в каждой строке, но быстрее. Второй шаг, сохранить в новый файл:
:w new_file.txt
А затем выйти без сохранения, чтобы old_file.txt
осталось без изменений:
:q!
Используйте команду :s
с регулярным выражением:
:%s/\v^\s*\S+(\s+(\S+).*)?/\2
\v
говорит Vim использовать "очень волшебный" стиль регулярных выражений, который похож на расширенные регулярные выражения в grep или pcre.
Регулярное выражение соответствует одному слову в начале, возможно, которому предшествует некоторый необязательный пробел. Затем, после еще нескольких пробелов, внутри группы \2
фиксируется второе слово. Наконец, .*
соответствует всей остальной части строки.
Часть после первого слова необязательна (, сгруппирована в круглые скобки и сделана необязательной с последним?
). Это гарантирует, что строки с одним словом по-прежнему будут сопоставляться, и в этом случае они будут заменены пустой строкой, что, как я полагаю, следует ожидать от строки с одним словом, поскольку вторая работа в этом случае пуста. кейс. Это одно из преимуществ использования регулярных выражений для этой задачи, так как вы получаете больше контроля над тем, что делать со строками, которые имеют угловые регистры.
Наконец, группа \2
используется для замены. Он захватил второе слово в строке само по себе.
Затем вы можете сохранить измененное содержимое под новым именем файла:
:saveas new_file.txt
Это сохранит ваш немодифицированный old_file.txt
и гарантирует, что дальнейшие модификации текущего буфера будут выполняться только в new_file.txt
.
:!cut % '-d ' -f2 > new_file.txt
Обратите внимание, что разделителем по умолчанию для cut
является табуляция, поэтому вы можете использовать ' -d ', чтобы установить в качестве разделителя пробел.
Изнутри Vi вы можете использовать %
в качестве замены текущего имени файла.