grep -rlZP '(?=.*printf)(?=.*%s)(?=.*bcm_errstr\(rv\))'. |
xargs -r0 sed -i -e '
/%s/!b
/printf/!b
/bcm_errstr(rv)/!b
s/%s/%d/g;s/bcm_errstr(rv)/rv/g
'
Сначала мы запускаем рекурсивный каталог. из текущего каталога, который сканирует файлы, содержащие строки :printf, %s и bcm _errstr (rv )в одной строке, но, возможно, в любом порядке. Варианты grep
, которые помогут нам в этом,:
-r
=> будет рекурсивно запускаться для всех файлов в текущем каталоге и ниже. -l
=> отобразит имена файлов, которые соответствуют критериям, а именно, все 3 строки в одной строке. -Z
=> выбранные имена файлов разделяются нулем (\0 ), а не обычной новой строкой (\n ), так что мы можем работать с любыми именами файлов. -P
=> включить механизм регулярных выражений Perl, с помощью которого мы можем использовать предварительный просмотр, чтобы определить, существуют ли 3 строки в одной строке. На другой стороне конвейера xargs
ожидает получения имен файлов, разделенных символом \0. Затем он передает все эти имена файлов, насколько это возможно, в командную строку sed. Команду sed вы уже знаете из предыдущего вопроса, где она выполняет subs. только в тех строках, которые содержат 3 строки в одной строке.
You can use below command
lvresize -L +Mention_extra_sizewhich_you_want_to_add /dev/vgname/lvname
resize2fs /dev/vgname/lvname