我想解析一個css文件並將每個像素值乘以(2/3)。我想知道sed是否有可能?我知道這是不正確的語法,但我認爲它會帶回家的是我想達到的解釋:sed的計算
sed -e "s|\([0-9]*\)px|int((\1 * 2)/3)|g" file.css
所以基本上我要帶\ 1,由(2/3)相乘,並轉換爲和int。或者用awk更可能呢?假設我可以編寫一個python腳本,但想知道是否可以通過更快的方式完成。
感謝
我想解析一個css文件並將每個像素值乘以(2/3)。我想知道sed是否有可能?我知道這是不正確的語法,但我認爲它會帶回家的是我想達到的解釋:sed的計算
sed -e "s|\([0-9]*\)px|int((\1 * 2)/3)|g" file.css
所以基本上我要帶\ 1,由(2/3)相乘,並轉換爲和int。或者用awk更可能呢?假設我可以編寫一個python腳本,但想知道是否可以通過更快的方式完成。
感謝
用awk
$ cat file
foo: 3px; bar: 6px
$ awk '{for(i=1;i<=NF;i++){if($i~/^[0-9]+px/){o=$i;sub(/^[0-9]+/,"",o);$i=($i+0)*(2/3)o}}}1' file
foo: 2px; bar: 4px
您可以使用Perl像這樣做:
echo -e "100px;\n20px;" | perl -pe 's{ (\d*) (?=px) }{ $1*(2/3) }xe'
如果一行中有多於一個的事件,則不起作用 – mug896 2017-01-23 06:39:52
要回答最初的問題:是的,你可以在SED做到這一點,不,你不想這樣做,除非你有一些奇怪的限制阻止你使用任何其他工具。
我這樣說是因爲unix dc命令(桌面計算器)是在sed中編寫的,但它可以通過執行數學來工作,就像您可能在學校教數學一樣:字符串在數字上的操作,這樣。
您實際上必須編寫乘法和除法命令(或將它們從dc.sed中除去)才能完成此任務,並且結果將比上述任何建議運行慢幾個數量級。
如果您現在對dc.sed感興趣,通常將其作爲任何sed分發中的示例之一提供。
概述:http://sed.sourceforge.net/grabbag/scripts/dc_overview.htm腳本:http://sed.sourceforge.net/grabbag/scripts/dc.sed – 2010-02-25 22:32:47
sed $(sed -rn '
:X
/([0-9]+)px/ {
s##\a\1\a#
h
s#.*\a(.*)\a.*#echo -e s/\1px/$((\1 * 2/3))px/g#ep
x
bX
}
' cssfile) cssfile
它對'foo:3px'不起作用,其*是*有效的CSS。但只要你不寫這樣的垃圾,你就沒事了:D @tomh'-vCONVFMT =%d'將確保數字被截斷爲整數。 – ephemient 2010-02-26 18:43:59