comando SED para substituir determinada string pelo formato específico

0

Eu preciso converter a string abaixo

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

a saída deve ser como abaixo

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

Daí eu usei o comando abaixo

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

mas está dando saída abaixo

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

problema é aqui a palavra "st" é removida na primeira instrução e "AS" é removido na declaração 3. você poderia, por favor, dar o comando adequado para substituir isso?

    
por asalthangam 18.10.2016 / 13:52

2 respostas

2

isso deve ser feito

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

$ é uma âncora para apontar o fim de linha, então Name,$ corresponde a "Nome", no final da linha e substitui por "Nome",

    
por sddgob 18.10.2016 / 13:57
1

Existem muitas maneiras de fazer isso (por exemplo, usando grupos de captura) - possivelmente o mais simples é substituir Name, sem distinção entre maiúsculas e minúsculas somente nas linhas em que é precedido por uma sequência de pelo menos um caractere de palavra e pelo menos um caractere de espaço em branco:

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

ou usando expressões regulares básicas

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