Bash 使用带多个分离器的awk将第二列替换为第一列

Bash 使用带多个分离器的awk将第二列替换为第一列,bash,awk,Bash,Awk,我有这样的选项文件: <option value=Malaysia>xxxxxxxx</option> <option value=Malawi>yyyyyyyy</option> <option value=Malta>zzzzzzzz</option> <option value=Madagascar>hhhhhhhh</option> 但它并没有用马来西亚取代xxxxxxxx,因为>分隔符考虑

我有这样的选项文件:

<option value=Malaysia>xxxxxxxx</option>
<option value=Malawi>yyyyyyyy</option>
<option value=Malta>zzzzzzzz</option>
<option value=Madagascar>hhhhhhhh</option>
但它并没有用马来西亚取代xxxxxxxx,因为>分隔符考虑的是>之前的整个部分是第一个变量

如何在此场景中操作多个分隔符,以便我可以将$2(我希望它是xxxxxxxx、yyyyyyyy、zzzzzz、hhhhhhhhhhhh)替换为$1(上面的国家名称)

谢谢

您可以使用此awk:

awk -F "[<=>]" '{$4=$3; printf "<%s=%s>%s<%s>\n", $2, $3, $4, $5}' test.html

<option value=Malaysia>Malaysia</option>
<option value=Malawi>Malawi</option>
<option value=Malta>Malta</option>
<option value=Madagascar>Madagascar</option>
awk-F“[]”{$4=$3;printf“%s\n”、$2、$3、$4、$5}test.html
马来西亚
马拉维
马耳他
马达加斯加

A
gnu awk
版本使用
gensub

awk -F"=|>" '{print gensub("(>).*(<)","\\1"$2"\\2","g")}' test.html
<option value=Malaysia>Malaysia</option>
<option value=Malawi>Malawi</option>
<option value=Malta>Malta</option>
<option value=Madagascar>Madagascar</option>
awk-F“=|>”{print gensub((>)*(
awk -F"=|>" '{print gensub("(>).*(<)","\\1"$2"\\2","g")}' test.html
<option value=Malaysia>Malaysia</option>
<option value=Malawi>Malawi</option>
<option value=Malta>Malta</option>
<option value=Madagascar>Madagascar</option>