我正在尝试为bash中的正则表达式替换结果分配一个变量。例如,当我跑步
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private FilterChainExceptionHandler filterChainExceptionHandler;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(filterChainExceptionHandler, LogoutFilter.class)
(...)
}
}
我从echo $initialvar | perl -pe 's/.+(Some_Dir\/)(.+)/\2/'
获得了期望的输出。如何将echo
分配给结果输出?
我尝试过:
newvar
但它们都不起作用
答案 0 :(得分:2)
您可以使用以下任一选项:
newvar=$(echo "$initialvar" | perl -pe 's/.+(Some_Dir\/)(.+)/\2/')
newvar=`echo "$initialvar" | perl -pe 's/.+(Some_Dir\/)(.+)/\2/'`
答案 1 :(得分:2)
对于您的问题,这似乎包含两个挑战:一个是将运行命令的输出分配给BASH变量,另一个是将变量的内容传递给Perl程序的标准输入。 / p>
foo=$(bar)
运行bar
并将其输出保存到BASH变量$foo
。
任何
echo "$foo" | bar
bar <(echo "$foo")
bar <<< "$foo"
运行bar
,将$foo
的内容通过管道传输到其标准输入
baz=$(bar <<< "$foo")
将$baz
设置为bar
产生的值,并将$foo
的内容发送到其标准输入。
其次,一些与Perl相关的建议与您的问题相关:
我可以改用perl -nE
:
-n
会像-p
那样遍历每一行,但默认情况下不会打印。-E
的评估结果类似于-e
,但启用了诸如say
这样的实验性功能。您可以使用其他分隔符来避免在Some_Dir/
中转义斜线。 s!...!...!
或m!...!
。不用用s//
代替,因为您只打印“ Some_Dir /”(如果它匹配),那么您最好直接去做:
perl -nE 'say (m!Some_Dir/! ? "Some_Dir/" : $_)'
所以:
newvar=$(perl -nE 'say (m!Some_Dir/! ? "Some_Dir/" : $_)' <<< "$initialvar")