使用 sed 使用匹配字符串中的信息替换字符串

使用 sed 使用匹配字符串中的信息替换字符串

我的文本文件中有特定格式的字符串。我想替换字符串的单词部分但保留数字标识符。例如,我有类似 的字符串L2_name1L12_name6但许多名称具有相似的标识符:name1 = JohnMSmith,name6 = JohnMSmithinson。

我想使用类似的东西sed 's/L2_name1/L2_new_name/g' file.csv,但使用正则表达式,所以类似

sed -E 's/L[0-9]{1,2}_name1/{same leading monicker found in the matching part}_new_name/g' file.csv

答案1

您可以通过在命令的匹配部分中将要记住的内容放在括号中来记住内容,然后使用\N某个数字 N 来回忆所记住的内容,并将其替换为匹配部分中第 N 组括号所记住的内容:

sed -E 's/(L[0-9]{1,2})_name([0-9]+)/\1_new_name\2/g' file.csv

请参阅sed手册了解完整详情。

编辑:我应该指出,您可以使用各种特殊字符,例如()[]{}+不转义它们,因为您已经指定了-Eie 扩展正则表达式。该手册再次提供了完整的详细信息。

答案2

您可以用于\0引用匹配的字符串。

echo "test string this is a test string" | sed -E 's/test string(.+?)test string/\0 success/'

在正则表达式中查找主题捕获组以获取更多信息。

相关内容