如何使用 sed、awk 或任何其他命令填充结束标记?

如何使用 sed、awk 或任何其他命令填充结束标记?

我有一个txt如下所示的文件:

<sss>ss<

或者

<firstword>anotherword<

我希望它看起来像这样

<sss>ss</sss>

或者

<firstword>anotherword</firstword>

基本上取出第一个单词并将其放在结束标记中。

在你问我尝试过什么之前,答案是什么,我什么也想不到。

答案1

有输入:

<abc>def<
<firstword>anotherword</firstword>
<ghi>klm<

使用:

sed 's/<\([^>]*\)>\(.*\)<$/<\1>\2<\/\1>/' input

输出:

<abc>def</abc>
<firstword>anotherword</firstword>
<ghi>klm</ghi>

sed 行仅影响以 结尾的行<(因为<$),并捕获第一对之间和 '><' 之间的模式<>,并将所有内容粘贴回末尾复制第一对(加上结束的 '>')

答案2

这是一个 perl 方法,本质上与 Anthon 的解决方案相同sed

$ perl -pe 's/<(.+)>(.+)</<$1>$2<\/$1>/' file
<sss>ss</sss>

相关内容