Как заменить текст запятой [Linux на Windows] - PullRequest
0 голосов
/ 24 октября 2019

Мы получаем эти автоматические электронные письма от нашего клиента, которые имеют приблизительный формат:

VP##0-X1-#####-#[Revision #:Document title]
VP##0-X2-#####-#[Revision #:Document title]
VP##0-X3-#####-#[Revision #:Document title]

Что я хочу сделать:

  • заменить [Revision запятой
  • замените : запятой
  • delete ]

Чтобы я мог преобразовать это в CSV, а затем использовать магию Excel для заполнения нашего трекингалист.

Я пытался использовать sed с этим общим форматом:

sed -i 's,[Revision ,\,,g' <FILE>

, но я не знаю, как ввести запятую дляэто дело.

Вот что я хочу получить в итоге:

VP##0-X1-#####-#,#,Document title
VP##0-X2-#####-#,#,Document title
VP##0-X3-#####-#,#,ocument title

Любое и всякое понимание приветствуется.

Я использую Ubuntu в Windows.

Ответы [ 4 ]

3 голосов
/ 24 октября 2019
sed  's/\[Revision /,/;s/:/,/;s/]//' inputfile
VP##0-X1-#####-#, #,Document title
VP##0-X2-#####-#, #,Document title
VP##0-X3-#####-#, #,Document title

Нет необходимости использовать тяжелую работу, используя back-referencing или несколько команд sed. Вы можете выполнить несколько команд замены из одной команды sed:

Синтаксис:

sed 's/a/A/' file
sed 's/b/B/' file
sed 's/c/C/' file

Может быть объединена в одну команду:

sed 's/a/A/;s/b/B/;s/c/C/' file   #note the semicolon separating multiple replace operations.
0 голосов
/ 24 октября 2019

Вы можете использовать:

sed -Ei 's/(.*)(\[Revision)(.*)(:)(.*)(])/\1,\3,\5/' <FILE>

Тестирование с помощью одной строки и эха:

$ echo "[VP##0-X1-#####-#[Revision #:Document title]" | sed -E 's/(.*)(\[Revision)(.*)(:)(.*)(])/\1,\3,\5/'
[VP##0-X1-#####-#, #,Document title

Объяснение:

  • '(.*)(\[Revision)(.*)(:)(.*)(])

Регулярное выражение в первой половине команды sed разделено на 6 групп, определяемых (). Группа 2 (\[Revision) будет соответствовать "[Revision", а группа 4 (:) будет соответствовать ":", части строки, которую вы хотите заменить.

  • /\1,\3,\5/'

Во второй части команды те же группы могут использоваться в качестве текста замены, поэтому я использовал группу 1 (\1), чтобы сохранить все до "[Revision", затем запятую ',', затем используйтегруппа 3 (\3) (все между "[Revision" и ":"), запятая "," и, наконец, группа 5 (\5). Группа 6 будет соответствовать финальному ']', поэтому она не используется, как вы хотели удалить.

0 голосов
/ 24 октября 2019

С помощью sed / является довольно распространенным разделителем. Кроме того, квадратные скобки являются специальными символами и должны быть экранированы.

заменить [Revision запятой

sed -i 's/\[Revision /,/g' <FILE>

заменить : назапятая

sed -i 's/:/,/g' <FILE>

удалить ]

sed -i 's/\]//g' <FILE>
0 голосов
/ 24 октября 2019

[ необходимо экранировать, поскольку это специальный символ для регулярных выражений. Также может быть лучше использовать другой символ, чем ,, в качестве разделителя в команде sed. Это должно сделать трюк:

sed -i 's/\[Revision /,/g' <FILE>
...