我的文件内容如下,所需的输出如下所示。使用单独的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>
答案 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>