这是我的代码
cd /bin/
echo *xyz?2* | cut -f 1 -d '.'
请问,如何更改此命令以显示没有扩展名的文件? 最好成绩。
答案 0 :(得分:1)
将文件名转储到数组中,然后使用parameter expansion:
$ arr=(xyz?2*); echo "${arr[*]%.*}"
xyz32281 xyz32406 xyz32459 xyz3252 xyz7214 xyz8286
答案 1 :(得分:0)
假设您的文件名没有任何空格或全局字符。
您可以在命令中使用printf '%s\n'
代替echo
:
printf '%s\n' *xyz?2* | cut -f 1 -d '.'
xyz32281
xyz32406
xyz32459
xyz3252
xyz7214
xyz8286
如果您必须使用echo
,请使用awk
:
echo *xyz?2* | awk '{for(i=1; i<=NF; i++) print (split($i, a, /\./)==2 ? a[1] : $i)}'
xyz32281
xyz32406
xyz32459
xyz3252
xyz7214
xyz8286
此awk
命令迭代遍历glob模式匹配的每个文件名,并按点分割每个名称。如果找到点,则打印第一部分,否则打印完整的文件名。
答案 2 :(得分:0)
您的问题是echo *xyz?2*
的所有文件都显示在一行中。当文件名没有空格/换行符时,您可以通过将它们移动到不同的行并在完成时再次加入它来解决此问题。
echo *xyz?2* | tr ' ' '\n' | cut -f 1 -d '.' | tr '\n' ' '| sed '$s/ $/\n/'
使用sed
:
echo *xyz?2* | sed 's/[.][^. ]*//g'