每行换行特定字段

每行换行特定字段

文件:

DocumentNameA varying number of words symbols etc
DocumentName2 varying number of words symbols etc
AnotherDocumentName varying number of words symbols etc

我想做类似的事情

sed -i 's/$1/"<opentag>"$1"</closetag>"/' file

将文件更改为

<opentag>DocumentNameA</closetag> varying number of words symbols etc
<opentag>DocumentName2</closetag> varying number of words symbols etc
<opentag>AnotherDocumentName</closetag> varying number of words symbols etc

似乎一定有一个简单的方法可以做到这一点,但我还没有找到

答案1

您可以使用 awk 来更接近您建议的语法 -

awk '{$1 = "<opentag>" $1 "</closetag>"} 1' file

或者

awk '{$1 = sprintf("<opentag>%s</closetag>", $1)} 1' file

GNU awk 有一个-i inplace开关,相当于 sed 的-i,例如:

gawk -i inplace '{$1 = "<opentag>" $1 "</closetag>"} 1' file

答案2

您可以使用\1来引用正则表达式中的匹配子表达式:

 sed -Ei 's:^([^ ]+):"<opentag>\1</closetag>":' file

相关内容