Команда 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", 

проблемой является здесь слово "Св.", удален в первом операторе, и "AS" удален в 3 операторах. Вы могли дать надлежащую команду для замены этого.

0
задан 18 October 2016 в 15:51

2 ответа

это должно сделать

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

$, привязка для указания на конец строки, таким образом Name,$ соответствия 'Имя', в конце строки и заменяют его "Именем",

1
ответ дан 28 September 2019 в 09:20

Существует много способов сделать это (например, с помощью групп получения) - возможно, самое простое должно заменить 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",
1
ответ дан 28 September 2019 в 09:20

Другие вопросы по тегам:

Похожие вопросы: