SED 命令用于替换特定格式的某些字符串

SED 命令用于替换特定格式的某些字符串

我需要转换以下字符串

 TableName.Cust Name,
 Name,
 TableName.Name AS Name, 

输出应该如下所示

 TableName.Cust "Name",
 Name,
 TableName.Name AS "Name",

因此我使用了以下命令

sed 's/[a-z][A-Z] Name,/ "Name",/gI'

但它给出的输出如下

TableName.Cu "Name",
Name,
TableName.Name "Name", 

问题是,第一个语句中的单词“st”被删除,第三个语句中的单词“AS”被删除。您能否给出适当的命令来替换它。

答案1

这应该做

$ sed '/TableName/s/Name,$/"&"/' infile
Name,
TableName.Name AS "Name,"

$是指向行尾的锚点,因此Name,$在行尾匹配“Name,”,并将其替换为“Name,”

答案2

有很多方法可以做到这一点(例如,使用捕获组) - 可能最简单的方法是Name,不区分大小写地替换仅有的在那些以至少一个单词字符和至少一个空格字符序列开头的行上:

$ sed -E '/\w+\s+Name,/ s/Name,/"Name",/I' infile
  TableName.Cust "Name",
  Name,
  TableName.Name AS "Name",

或使用基本正则表达式

$ sed '/[[:alnum:]_-]\{1,\}[[:blank:]]\{1,\}Name,/ s/Name,/"Name",/I' infile
  TableName.Cust "Name",
  Name,
  TableName.Name AS "Name",

相关内容