Ниже приведен вариант использования, в котором мне нужно удалить некоторые специальные символы (", /, \) с помощью sed.
sample.txt
srcs : [a.c] cflags : [abcd@ef]
srcs : ["b.c"] cflags : [ab\cd"ef]
srcs : [r/.c] cflags : [a""bcd*ef""]
srcs : [g.c] cflags : [ab/cd*ef]
Необходимо удалить (\, ", /) только из записи cflags в каждой строке. Ожидаемый результат:
srcs : [a.c] cflags : [abcd@ef]
srcs : ["b.c"] cflags : [abcdef]
srcs : [r/.c] cflags : [abcd*ef]
srcs : [g.c] cflags : [abcd*ef]
Механизм подстановки попыток sed с регулярным выражением, который ищет строку между "cflags" и "]", которая возвращает строки между cflags и]:
cat sample.txt | sed 's/cflags : \(.*\)]/\1/'
srcs : [a.c] [abcd@ef
srcs : ["b.c"] [ab\cd"ef
srcs : [r/.c] [a""bcd*ef""
srcs : [g.c] [ab/cd*ef
Замещается на '' но он удаляет всю запись cflags:
cat sample | sed 's/cflags : \(.*\)]/''/'
srcs : [a.c]
srcs : ["b.c"]
srcs : [r/.c]
srcs : [g.c]
Ищет регулярное выражение, которое может найти (\, ", /) между cflags и ']' в каждой строке, а затем его можно просто удалить с помощью sed.