Как заменить все вхождения символов типа '[', '(' и т. Д. На '\ [', '\ (', используя "sed" в файле? " - PullRequest
0 голосов
/ 14 января 2011

У меня есть файл «say file.txt» со следующим содержимым:

Capsule arr[0] in state A
rate_ul/dl=(2000000/7000000)
Capsule RBx[0] in state
...
...

с помощью оператора sed Как мне заменить все вхождения [ на \[, ( на \(, ] на \] и т. Д.

Capsule arr\[0\] in state A
rate_ul/dl=\(2000000/7000000\)
Capsule RBx\[0\] in state
...
...

Используя оператор подстановки в "gvim", я могу достичь того же результата. то есть. если я использую :1,$ s/\[/\\[/g в редакторе vi в командном режиме, я вижу все символы [, замененные на \[.

Однако, если я попытаюсь использовать ту же команду подстановки в сценарии оболочки, используя команду sed, я не смогу добиться того же результата. т.е. если я использую следующую команду в сценарии оболочки, я не смогу достичь желаемого результата:

sed "s/\[/\\[/g"  $temp_file2 > $temp_file1
where $temp_file2 conatins the lines with '[' characters and $temp_file1 should contain the replaced '\[' chars

Ответы [ 2 ]

1 голос
/ 14 января 2011
 sed 's/[][()]/\\&/g' infile > outfile

выход

$ sed 's/[][()]/\\&/g' infile
Capsule arr\[0\] in state A
rate_ul/dl=\(2000000/7000000\)
Capsule RBx\[0\] in state
0 голосов
/ 14 января 2011

версия gawk

gawk '{gsub(/[()\]\[]/,"\\\\&")}1' file
...