我想要输出'filename1','filename2' ,'filename3' ....
我使用awk ..但不知道如何在文件名后打印最后一个quoate。 它打印我,'filename ===>我需要','filename'
ls -ltr | grep -v ^d | sed '1d'| awk '{print "," sprintf("%c", 39) $9}'
提前致谢!
答案 0 :(得分:2)
您可以使用find
命令:
find . -maxdepth 1 -type f -printf "'%f'," | sed s/,$//
答案 1 :(得分:1)
如果你有Ruby(1.9 +)
ruby -e 'puts Dir["*"].select{|x|test(?f,x)}.join("\47,\47")'
否则
find . -maxdepth 1 -type f -printf '%f\n' | sed -e ':a N' -e "s@\n@','@" -e 'b a'
答案 2 :(得分:0)
答案 3 :(得分:0)
Pure bash(也可能是posix sh):
comma=
for file in * ; do
if [ ! -d "$file" ] ; then
if [ ! -z $comma ] ; then
printf ","
fi
comma=1
printf "'%s'" "$file"
fi
done
名称中包含'
的文件未计入,但其他人也没有这样做。假设用\
转义是正确的,你可以这样做。
comma=
for file in * ; do
if [ ! -d "$file" ] ; then
if [ ! -z $comma ] ; then
printf ","
fi
comma=1
printf "'%s'" "${file//\'/\'}"
fi
done
但有些CSV系统会要求您改为编写''
,这将是
printf "'%s'" "${file//\'/''}"
答案 4 :(得分:0)
让我们假装您正在处理除ls
输出之外的其他一些数据。
$ printf "hello\ngoodbye\no'malley\n" | awk '{gsub("\047","\047\\\047\047",$1);printf "%s\047%s\047",comma,$1; comma=","}END{printf "\n"}'
'hello','goodbye','o'\''malley'
答案 5 :(得分:0)
这个变种工作正常,但我认为应该有更优雅的方式来做到这一点。
ls -1 $ 1 |切-d'。' -f1 | awk'{printf“,”sprintf(“%c”,39)$ 1 sprintf(“%c”,39)“\ n”}'| sed'1 s /,* //'