Я хочу изменить первый фоновый цвет в соответствии со стилем
body {
с того, что он есть, на
background-color: #000000;
в семи различных файлах stylesheets.css через командную строку. Также каждый файл .css содержит более 10 экземпляров, поэтому я хочу изменить только один, следуя коду стиля body {
.
Сделайте некоторое изменение согласно своему файлу:
sed '0,/body{background-color:.*;/s//body{background-color:#000000;/' sample.css
или сделайте это быстро:
sed '0,/body{background-color:.*;/s//body{background-color:#000000;/' *.css
sed ':a;N;s/\n/\a/;$!ba;s/body[ \t\a]*{[ \t\a]*background-color:#[0-9a-zA-Z]*;/body\n{background-color:#000000;/;s/\a/\n/g;' *.css
Как правило, вам нужно хорошее регулярное выражение, соответствующее вашим потребностям. sed
- хороший инструмент для использования, perl
- другой. Единственная причина, по которой я предпочитаю perl
, заключается в том, что я лучше знаю синтаксис регулярных выражений. Следующая строка должна делать то, что вы хотите:
perl -0777 -i.bak -pe 's/(body {.*?background-color.*?)#.{6}/$1#000000/si;' ./style.css
-0777
означает разделение на пустые места, так что хламить весь файл (вместо строки за строкой по умолчанию используется -p)
-i.bak
означает изменение файлов на месте, оставляя оригинал с расширением .bak (по умолчанию -p - просто печатать)
-p
означает, что строка за строкой (за исключением случаев, когда мы крадемся) передается в код (см. -e)
-e
ожидает выполнения кода.
Объяснение регулярного выражения выходит за рамки моего ответа, но есть много учебных пособий, таких как , например, этот .
Обязательно проверьте результаты, так как я легко могу представить файлы CSS, которые могут вызвать проблемы с этим выражением. Например, наличие селекторов, содержащих слово body, может вызвать проблемы ...
Я бы попробовал для awk
:
gawk -v RS='}[[:space:]]*' '/^body[[:space:]]*{/ {
printf "%s%s", gensub (/background-color:[^;]*;/, "background-color: #000000;", 1), RT
}'
Это требует GNU awk (но может быть и без него).
}
, за которым следует любое количество пробелов. body {
с началом записи. background-color: #000000;
на первый экземпляр background-color
. Замените 1
на g
, чтобы соответствовать всем экземплярам. RT
содержит текст, сопоставленный разделителем записей. Если бы мы использовали фиксированную строку (}
) вместо регулярного выражения, мы могли бы использовать вместо ORS
. RT
нужен GNU awk. gawk -i inplace ...
По правде говоря, это не работа для регулярных выражений или анализаторов записей. Следует использовать то, что понимает язык CSS.