[英]Pass parameter into sed command
我正在尝试编写一个bash脚本,用户可以在其中传递一个正则表达式作为参数。 因此,例如,您以这种方式运行程序。
./clean_txt.sh s/.*\(my_choices.*gz\)/\1p
在程序中,我以这种方式使用该参数。
ls /home/user/ | sed -n '$1' > cleaned_file.txt
echo "sed -n '$1'"
在我的回声中,我看到启动程序时传递的正则表达式。 但是我的cleaned_file.txt为空。 唯一可行的方法是,如果我将正则表达式硬编码到程序本身中,但是这违背了我试图做的目的。
关于如何将参数传递给sed命令的任何想法吗?
问题是您的变量没有被扩展。 您需要将其用双引号引起来(这就是您已经在echo
执行的操作):
ls /home/user/ | sed -n "$1" > cleaned_file.txt
请注意,不需要ls
:
files=( /home/user/* )
sed -n "$1" <<<"${files[@]}" > cleaned_file.txt
会做同样的事情。 这使用一个glob创建一个包含所有文件名的数组,该文件名用作sed的输入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.