以下是我的命令输出:
# ls -la | grep -i text | awk '{print $9}'
text1.txt
text2.txt
text3.txt
text4.txt
我想打印输出值如下:
text1.txt:text2.txt:text3.txt:text4.txt
答案1
天哪,不,不解析ls
。 你要
( files=(*text*); IFS=:; echo "${files[*]}" )
我使用子 shell,因此当前 shell 中的 IFS 变量不受影响。
如果你确定文件名不包含换行符,你可以这样做
ls -1 *text* | paste -sd:
答案2
你可以将内容放入 bash 脚本中,如下所示:
unset list
for file in `ls -a | grep -i 'text'`; do list=$list"$file:"; done
echo ${list::-1}
如果您多次运行该命令,则初始操作unset
是删除先前的值。要删除最后的冒号 (:),您可以在echo
运行 bash4.2
或更高版本时执行此操作,就像我在代码中所做的那样。
答案3
请尝试一下,它应该有效
$ ls -la | grep -i text | awk '{printf ": %s", $9}'
答案4
你好,Mohammad Alzatari Ans 帮助我解决了这个问题。
$ ls -la | grep -i text | awk '{printf ":%s", $9}'|awk '{print substr($1,2);}'
text1.txt:text2.txt:text3.txt:text4.txt
问题解决了