我目录中有 3 个文件:xyz1.txt
、,我只想处理前两个文件(以 xyz 开头的文件)。该命令将返回所有这三个文件。我可以xyz2.txt
对命令进行哪些修改以仅指定 xyz* 文件?我试图认为它会确保文件以 xyz 开头,但这并不能排除。rst_xyz.txt
ls | awk '/xyz/{print $1}'
ls | awk '/^xyz/{print $1}'
rst_xyz.txt
答案1
答案2
不需要 awk。只需使用文件名 glob:
ls xyz*
您很可能希望通过管道传输文件名来处理它们?也许像这样?
ls xyz* | some other commands
在这种情况下,最好使用 for 循环。
for filename in xyz*
do
some other commands "$filename"
done
请注意,在第一个变量中,文件名将作为流发送到 stdin,some other commands
而在 for 循环中,文件名将作为命令行参数逐一出现some other command
。
答案3
ls | awk '/^xyz/'
您原来的解决方案只是在 regep 中缺少了^
,它将匹配项锚定到行首。您不需要块,print
因为找到匹配项时的默认操作是打印该行。如果您想明确说明,您可以这样写:
ls | awk '/^xyz/ {print $0}'
如果文件名包含空格,则应使用$0
而不是(尽管如果文件名包含换行符,这仍会将其视为多个名称)。$1