Unix - замена - PullRequest
       8

Unix - замена

1 голос
/ 25 марта 2009

У меня проблема с заменой. У меня есть файл с 1 строкой случайных символов в скобках "{}" около 1 символа. Я хочу перейти с этими скобками на предыдущий символ или на следующий. (Я знаю, как это сделать, если символьная строка все еще остается неизменной.) Но мне интересно, как это сделать, когда я не знаю эти символы и не знаю, где эти скобки.

Например: «ABC123 {X} CBA321» ==> «ABC12 {3} XCBA321» или «ABC123X {C} BA321»

Я бы хотел использовать awk или sed, какое-нибудь регулярное выражение, может быть ...

Ответы [ 4 ]

5 голосов
/ 25 марта 2009

Переместиться назад на один символ:

sed -e 's/\(.\){\(.\)}/{\1}\2/g' file

Переместиться вперед на один символ:

sed -e 's/{\(.\)}\(.\)/\1{\2}/g' file

Чтобы изменить файл на месте, используйте флаг -i:

sed -i -e 's/\(.\){\(.\)}/{\1}\2/g' file
sed -i -e 's/{\(.\)}\(.\)/\1{\2}/g' file

Первый пример работает путем сопоставления любого символа, за которым следует символ, окруженный {}. Без группировки это: .{.} Мы добавляем группировку, чтобы мы могли поместить два символа в вывод. Вместо окружения второго символа {}, окружите первый символ. Это {\1}\2.

Второй пример работает аналогично, но сначала совпадает с {.}., затем выводит \1{\2}.

3 голосов
/ 25 марта 2009

Это переместит скобки к предыдущему символу:

sed -e 's/\(.\){\(.\)}/{\1}\2/g' < in_file > out_file

Это переместит скобки на следующий символ:

sed -e 's/{\(.\)}\(.\)/\1{\2}/g' < in_file > out_file 
1 голос
/ 25 марта 2009

Вот небольшой пример.

$ echo "ABC123{X}CBA321" | sed -e 's/\(.\){\(.\)}\(.\)/{\1}\2\3/'
ABC12{3}XCBA321
$ echo "ABC123{X}CBA321" | sed -e 's/\(.\){\(.\)}\(.\)/\1\2{\3}/'
ABC123X{C}BA321

Вот как отредактировать файл на месте с помощью sed.

$ sed -i -e 's/\(.\){\(.\)}\(.\)/{\1}\2\3/' file
$ sed -i -e 's/\(.\){\(.\)}\(.\)/\1\2{\3}/' file
0 голосов
/ 25 марта 2009

я пробовал в perl. это переместит скобку к предыдущему символу

my $a="ABC123{X}CBA321";

if ($a =~ /(.)\{(.)\}/)
        {
                print "$`"."{$1}";
                print "$2";
                print "$'";
        }

ПРИМЕЧАНИЕ: $ `является строкой до совпадения & $ 'является строкой после совпадения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...