При использовании sed
я часто создаю довольно сложные и сложные регулярные выражения, которые мне нужно дважды сопоставить в файле. Есть ли способ для меня, чтобы сохранить это регулярное выражение и просто сослаться на него дважды?
Может быть, что-то похожее на это?
sed ' complicated_regex=/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+$/
s/complicated_regex:complicated_regex/simple-output/
' my_file
Обновление: ответ представил решение использования переменной bash. Это не работает Учитывая test.txt
.
#test.txt
foo bar
bar foo
И сценарий
#!/bin/bash
VALUE='foo \([a-z]\+\)'
sed 's/"${VALUE}"/foo happy \1/' test.txt
Это должно произвести вывод
foo happy bar
bar foo
Но вместо этого я получаю ошибку
sed: -e expression #1, char 24: invalid reference \1 on `s' command's RHS
sed 's/'"${VALUE}"'/foo happy \1/' test.txt
perl -pe 's/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+:\1$/simple_output/' my_file