用于查找,转换和替换文件中的值的Unix脚本

时间:2013-11-11 07:40:58

标签: css shell unix scripting sed

我有一个文件,其中包含许多以字符串px结尾的值。我需要找到所有这些值,使用0.43将它们复用,然后再次使用子字符串pt而不是px将它们写入文件 我如何实现这一目标?

例如文件中的字符串:

 .ClassOne
 {
 margin: .35em 5px;
 overflow: hidden;
 padding: 0 1.4em 0 .5em;
 position: relative;
 text-overflow: ellipsis;
 white-space: nowrap;
}
.ClassTwo
{
 border: 7px solid #FFF;
 border-top-color: #000;
 position: absolute;
 right: 6px;
 top: .95em;
}
.ClassThree
{
 bottom: 5px;
 height: 1px;
 left: 1em;
 position: absolute;
 right: 2em;
}

查找以px结尾的所有值,并通过乘以0.43将它们转换为点,然后将它们写回文件。 Example: 5px = 2.15pt, -9px = -3.87pt

如何使用unix中的单行命令行实现这一目标?由于我是shell脚本的新手,我需要一些帮助。我所知道的是,可以使用sed -i来实现。

1 个答案:

答案 0 :(得分:2)

使用awk在线人,你可以这样做:

awk '{for (i=1;i<=NF;i++) if ($i~/px/) {$i=$i*0.43"pt";if (i=NF) $i=$i";"}}1' file
.ClassOne
 {
margin: .35em 2.15pt;
 overflow: hidden;
 padding: 0 1.4em 0 .5em;
 position: relative;
 text-overflow: ellipsis;
 white-space: nowrap;
}
.ClassTwo
{
border: 3.01pt solid #FFF;;
 border-top-color: #000;
 position: absolute;
right: 2.58pt;
 top: .95em;
}
.ClassThree
{
bottom: 2.15pt;
height: 0.43pt;
 left: 1em;
 position: absolute;
 right: 2em;
}

这会将所有字段px纳入其中并将它们乘以0.43并添加pt
然后将数据写回文件。