在同一行中添加匹配的字符串以及匹配后的附加字符串

在同一行中添加匹配的字符串以及匹配后的附加字符串

我知道标题听起来有点令人困惑,但希望我的例子能够澄清我的问题。

所以我有一个包含名称列表的文件(names.txt),例如:

约翰·
大卫·
理查德

我正在尝试使用循环来获得以下结果:

约翰 约翰.
多伊 大卫 大卫.多
伊 理查德 richard.doe

不确定使用 sed 是否是正确的命令或方法,但这是我尝试过的:

for i in $(cat names.txt); do sed "s/$/ $i.doe/" names.txt; done

这种方法有点可行,但是会产生如下迭代列表:

约翰·约翰·多
伊·大卫· 约翰· 多伊·理查德 ·约翰· 多伊· 约翰·大卫·多伊·大卫 ·大卫 ·多伊·理查德·大卫
·多伊·约翰· 理查德·多伊· 大卫 ·理查德· 多伊 ·理查德·理查德·多伊





我也尝试过 while IFS= read -r 循环,也得到了类似的结果。似乎不能只处理每一行而不产生上面的结果。

我可能完全偏离了主题,但希望有人能在这里提供帮助。

提前致歉。我以前使用过 sed 但用于更简单的任务。

答案1

一种可能的方法是使用awk.像这样的命令可以完成这项工作:

awk '{print $1,$1 ".doe"}' names.txt

答案2

你明白了吧sed。您不需要循环sed,它无论如何都会循环所有行。只需进行更换即可

sed 's/.*/& &.doe/' names.txt

.*匹配整行,并&在替换中插入整个匹配。

您无需切换工具,只需按其应有的方式使用该工具即可。

答案3

通过sed完成

sed -r -e  "s/\s+//g" -e "s/.*/& &.doe/g" file1

输出

john john.doe
david david.doe
richard richard.doe

相关内容