Поиск и замена в UNIX - PullRequest
       15

Поиск и замена в UNIX

0 голосов
/ 05 июня 2011

Как мне заменить строку в файле таким образом, чтобы заменяемая строка всегда заменялась какой-либо строкой.

Например: если я хочу заменить ABC на 123, как показано ниже,

ВХОД

ABC
ABCXYZ
ABCDHD
ABC
CDE

OUTPUT

ABC
123XYZ
123DHD
ABC
CDE

Я пытался использовать sed, но безуспешно.

Ответы [ 5 ]

6 голосов
/ 06 июня 2011

Без захвата с использованием упреждающего просмотра:

s/ABC(?=\S)/123/;
2 голосов
/ 05 июня 2011
perl -pi.bak -e 's/^ABC(.+)$/123$1/g' file.txt

Однако это также заменит пробел. Если вы не хотите этого, вместо .+ вы можете использовать \S+.

Опция -i.bak сохранит резервную копию file.txt в file.txt.bak на случай, если вы помешали замене.

2 голосов
/ 05 июня 2011
sed -i 's/ABC\(.+\)$/123\1/g' myFile.txt

ABC, сопоставьте буквенный ABC!

\(.+\) сопоставьте хотя бы с 1 другим символом, захватите его в группе 1

123\1 замените объект дыры 123затем следует то, что захвачено в группе 1

1 голос
/ 05 июня 2011

у меня этот работал:

$ sed   -r  s/ABC\(.+\)/123\\1/g <file>
ABC
123XYZ
123DHD
ABC
CDE
0 голосов
/ 27 февраля 2013

Удивлен, что никто не использовал \B.

#!/usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
  s/ABC\B/123/;
  print;
}

__DATA__
ABC
ABCXYZ
ABCDHD
ABC
CDE
...