从字符串获取字符串,然后在bash中将其粘贴到另一个字符串

时间:2012-03-30 13:16:19

标签: linux bash

来自行:

< div style="left:0px; top:0px; width:100%; height:63px; border-style: solid; border-width: 1px; background-color:#FCF0C4; border-color:#E87511; border-style: solid; border-width: 1px; position:absolute;" >

我想得到(价值可能会有所不同) #FCF0C4 然后将其粘贴到另一行

< div style="left:2px; top:32px; width:744px; height:27px; display:block; border-style: solid; border-width: 1px; position:absolute; overflow:hidden; background-color:#ffffff;" >

而不是

#ffffff

3 个答案:

答案 0 :(得分:2)

怎么样:

sed 's/^.*background-color:\(#......\).*/s_background-color:#ffffff_background-color:\1_/' INFILE > TMPSED
  sed -if TMPSED ANOTHERFILE

如果它们位于同一文件中,则为awk的另一个解决方案。线的标识可能是正则表达式,行号等。

awk '/IDENTIFY_YOUR_LINE_TO_COPY_COLOR/ { color=gensub(".*backround-color:(.......).*","\\1","g",$0) }
     /IDENTIFY_YOUR_LINE_TO_COPY_TO     {print gensub("^(.*backround-color:)#ffffff;(.*)","\\1" color "\\2","g",$0)}' INPUTFILE > OUTPUTFILE

答案 1 :(得分:2)

您是否使用grep收集这些行?或者你想要解决方案吗?要在同一个文件中更改或不同的文件?有几个文件要编辑吗?什么决定了要抓取哪一行以及要编辑哪一行?您缺少正确的解决方案的许多重要细节。

离开你在这里的东西:

TMPCOL=$(get line somehow | sed -r -n 's/background-color:#(.*);/\1/ p')
sed -i "s/background-color:#.*;/background-color:#$TMPCOL;/" fileToFix

答案 2 :(得分:2)

捕捉颜色:

COL=$(echo '< div ... >' | sed -r 's/.*background-color:#([0-9A-Fa-f]{1,6});.*/#\1/')

将其粘贴到目标中:

echo '< div ... >' | sed -r 's/(.*background-color:#)([0-9A-Fa-f]{1,6})(;.*)/\1'$COL'\3/'

结果:

< div style="left:2px; top:32px; width:744px; height:27px; display:block; border-style: solid; border-width: 1px; position:absolute; overflow:hidden; background-color:##FCF0C4;" >