繁体   English   中英

将参数传递给sed命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM