2013-06-06 5 views
0

я хочу сделать следующую замену в текстовом файле:о команде UNIX «SED»

исходная строка: "---a---"

после подстановки: "---\a---"

и я выполнить следующую команду:

sed -r -e "s/-(a)-/-\\\1-/g" test.txt 

но это не дает правильного результата. Какую команду нужно использовать?

+0

Спасибо за ответы. Я ошибочно удалил ответ. Я прошу прощения. – jun

ответ

1

Помните, что обратные косые черты важны в двойных кавычках Bash, а также в самом sed. Либо использовать одиночные кавычки:

sed -r -e 's/-(a)-/-\\\1-/g' test.txt 

Или избежать обратной косой черты снова:

sed -r -e "s/-(a)-/-\\\\\\1-/g" test.txt 

Если эхо строки, вы увидите, что происходит:

$ echo "s/-(a)-/-\\\1-/g" 
s/-(a)-/-\\1-/g 
$ echo 's/-(a)-/-\\\1-/g' 
s/-(a)-/-\\\1-/g 
$ echo "s/-(a)-/-\\\\\\1-/g" 
s/-(a)-/-\\\1-/g 

Первый (ваш оригинал) просто выглядит как буквальная обратная косая черта, сопровождаемая буквальным 1 для sed.

0

Попробуйте sed -r -e "s/-(a)-/-\\\\\\1-/g" или sed -r -e 's/-(a)-/-\\\1-/g'

Проблема заключается в том, что \ захвачен Баш, если вы используете двойные кавычки.

0

Вы должны заменить 1 с

sed -r -e "s/-(a)-/-\\\a-/g" test.txt 
0

С " вы должны сделать что-то вроде:

[jaypal:~/Temp] echo "---a---" | sed -r "s/-(a)-/-\\\\\1-/g" 
---\a--- 
0

так много ответов ......

Kaizen ~/so_test 
$ echo "---a---" | sed -n 's/a/\\a/p' 
---\a--- 

, так как у вас есть текстовый файл, следует работать:

sed -i 's/a/\\a/g' filename.txt ; 

это помогает?

Смежные вопросы