Linux命令echo文件名称直到char

时间:2018-02-20 19:32:24

标签: bash

这是我的代码

 cd /bin/
 echo *xyz?2* | cut -f 1 -d '.'   

请问,如何更改此命令以显示没有扩展名的文件? 最好成绩。

3 个答案:

答案 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'