如何获取字符串的第一个单词?

如何获取字符串的第一个单词?

当我echo * 得到以下输出时:

file1 file2 file3 ...

我想要的是选出第一个单词。我该如何继续?

答案1

您可以通过 awk 进行管道传输并使其回显第一个单词

echo * | head -n1 | awk '{print $1;}'

或者你剪切字符串并选择第一个单词:

echo *  | head -n1 | cut -d " " -f1

或者你通过 sed 进行管道传输并让它删除除第一个单词之外的所有内容

echo * | head -n1 | sed -e 's/\s.*$//'

添加 是| head -n1为了满足挑剔的人。如果您的字符串包含换行符,| head -n1则在重要命令选择传递给它的字符串中的第一个单词之前,将首先选择第一行。

答案2

假设有一个 posixy shell(/bin/sh或者/bin/bash可以做到这一点)

all=$(echo *)
first=${all%% *}

该构造${all%% *}是一个示例子串删除。该方法从变量 的右端%%删除最长的匹配项(一个空格,后跟任何内容) 。您可以阅读有关字符串操作的更多信息*all这里

该解决方案假设分隔符是一个空格。如果您使用文件名执行此操作,则任何带有空格的文件都会破坏它。

答案3

假设你真的想要第一个文件名而且不是第一个单词,这是一种不会因空格而中断的方法:

shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"

答案4

这有效:

echo * | grep -o "^\w*\b"

信用至https://unix.stackexchange.com/a/57879/3920

相关内容