需要将单个sed命令转换为一个单独的sed脚本

时间:2012-06-28 05:08:55

标签: sed

我的文件内容如下,所需的输出如下所示。使用单独的sed命令,我可以修改文件内容。说

sed -i -e 's!<tag1>FIELD1</tag1>!<tag1>Replaced contents of field1</tag1>! filename

但是我很难用单个sed脚本文件替换这些单独的命令。

sed -i -e 's!<tag1>FIELD1</tag1>!<tag1>Replaced contents of field1</tag1>! filename

This is a sample file containing a few tags

<tag1>FIELD1</tag1>
<tag2>FIELD2</tag2>

<tag1>FIELD1 Do not change me</tag1>
<tag2>FIELD2 Do not change me</tag2>

所需的输出是

<tag1>FIELD1</tag1>

<tag2>FIELD2</tag2>

<tag1>FIELD1 Do not change me</tag1>

3 个答案:

答案 0 :(得分:3)

您可以链接-e表达式。

例如:

sed -e 's!<tag1>FIELD1</tag1>!<tag1>Replaced contents of field1</tag1>!g' -e 's!<tag2>FIELD2</tag2>!<tag2>Replaced contents of field2</tag2>\n<tag2>Some addition to field2</tag2>!g' filename

答案 1 :(得分:1)

tag=(  "tag1"          "tag2" )
find=( "FIELD1"        "FIELD2" )
repl=( "Replacement 1" "Replacement 2" )
regex=
I=$'\x01' # sed delimiter
for (( i=0; i<${#find[@]}; i++ )) ;do
    regex+="s$I<${tag[i]}>${find[i]}</${tag[i]}>$I<${tag[i]}>${repl[i]}</${tag[i]}>${I}g;"
done
sed "$regex" "$file"

您可能希望也可能不希望或需要每个表达式末尾的g

答案 2 :(得分:0)

这对我有用。

sed_script文件(单个文件)

/<tag1>FIELD1<\/tag1>/s!<tag1>FIELD1</tag1>!<tag1>Replaced contents of field1</tag1>!
/<tag2>FIELD2<\/tag2>/c\
<tag2\>Replaced contents of field2</tag2>\
<tag2\>Some addition to field2</tag2>