консольная утилита для преобразования слов в буфере в верхний регистр на основе списка слов

Как уже упоминалось в комментариях, это последний PV в VG, поэтому вы не можете его удалить, потому что это уничтожит VG, а программному обеспечению LVM негде хранить метаинформацию о VG. С этого момента ваша операция немного бессмыслица. Это будет иметь смысл только в других системах/программном обеспечении LVM.

Правильное действие в вашем случае - уничтожить ВГ:

vgremove lubuntu-vg
0
08.04.2021, 23:17
2 ответа

Аналогичным образом вы можете использовать sed-файл с шаблонами подстановки, а затем применить этот sed-файл к целевому тексту.

Вот содержимое примера sed-файла с именем my _custom _substitutions.sed на основе ваших замен выше:

s/\<import\>/IMPORT/g
s/\<module\>/MODULE/g

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

sed -f my_custom_substitutions.sed targetfile.txt 

Чтобы применить эти пользовательские замены к целевому файлу с помощью sed:

sed -i -f my_custom_substitutions.sed targetfile.txt 


Другим способом может быть использованиеtr:

echo "lower case text" | tr '[a-z]' '[A-Z]'

Если вы хотите сделать это из vim для строки 2 в вашем файле, вы можете сделать:

:2 ! tr '[a-z]' '[A-Z]'   

Если вы хотите применить это к нескольким строкам в диапазоне, например, от строки 2 до строки 4, вы можете сделать:

:2,4  ! tr '[a-z]' '[A-Z]'
0
28.04.2021, 22:53

Если у вас есть файл с командами Vim, вы можете применить его к файлу с помощью параметра -Sредактора Vim:

$ cat edits
%s/\<import\>/IMPORT/g
%s/\<module\>/MODULE/g
%s/\<bumblebee\>/BUMBLEBEE/g
%s/\<please\>/PLEASE/g
%s/\<for\>/FOR/g
%s/\<over\>/OVER/g
%s/\<do\>/DO/g
%s/\<done\>/DONE/g
wq
$ cat program
module top.

import "library".

for i over <zoidberg> -> do
        bumblebee i:th, please.
done
$ vim -S edits program
$ cat program
MODULE top.

IMPORT "library".

FOR i OVER <zoidberg> -> DO
        BUMBLEBEE i:th, PLEASE.
DONE

Обратите внимание, что последний wqв файле editsсохранит документ с тем же именем файла, что и оригинал.

Также обратите внимание, что это необычный способ редактирования файлов с терминала и что чаще используется потоковый редактор, такой какsed(см. ниже ).Основные проблемы, связанные с этим, заключаются в том, что Vim не является не -интерактивным редактором и что он будет считывать весь документ в память перед выполнением сценария редактирования (, который неэлегантен , когда он не нужен ). Вам также обременительно поддерживать сценарий редактирования, а не простой список ключевых слов.


Предположим, у вас есть файл со списком ключевых слов в нижнем регистре, которые необходимо преобразовать в верхний регистр, по одному ключевому слову в строке.

Простая программа на Perl превратила бы список в sedсценарий редактирования:

$ cat keywords
import
module
bumblebee
please
for
over
do
done
$ perl -pe 's{.*}{s/\L\\<$&\\>/\U$&\L/g}' keywords
s/\<import\>/IMPORT/g
s/\<module\>/MODULE/g
s/\<bumblebee\>/BUMBLEBEE/g
s/\<please\>/PLEASE/g
s/\<for\>/FOR/g
s/\<over\>/OVER/g
s/\<do\>/DO/g
s/\<done\>/DONE/g

Код Perl просто берет каждую строку и вставляет ее в sedвыражение

s/\<word\>/WORD/g

, где wordи WORD— строка в одной из строк в файле keywords, в нижнем -, а затем в верхнем -регистре.

Затем это можно применить к исходному коду вашей программы.:

$ cat program
module top.

import "library".

for i over <zoidberg> -> do
        bumblebee i:th, please.
done
$ perl -pe 's{.*}{s/\L\\<$&\\>/\U$&\L/g}' keywords | sed -f /dev/stdin program
MODULE top.

IMPORT "library".

FOR i OVER <zoidberg> -> DO
        BUMBLEBEE i:th, PLEASE.
DONE

С помощью -f /dev/stdin, sedможет прочитать сценарий редактирования из вывода Perl, а затем применить его к данному файлу (здесь, файлу с именемprogram).

Обратите внимание, что эта упрощенная замена слов не будет знать о правилах цитирования вашего языка, поэтому она заменит любые ключевые слова, найденные в строках и т. д., которые, возможно, не нужно заменять.

0
28.04.2021, 22:53

Теги

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