在使用时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来说太复杂时,请毫不犹豫地选择awk或perl。
—
吉尔(Gilles)“所以,别再邪恶了”,
@Cory:如果正确使用了示例,则示例可以正常工作。您仍然将“ $ variable”括在“单引号”中,将其从您期望的shell扩展中隐藏起来……应该是
—
Peter.O 2011年
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