在 Bash 中根据单词拆分字符串

Ale*_*hie 4 unix linux bash cut

我希望能够分割一个单词上的字符串。本质上是一个多字符分隔符。例如,我有一个字符串:

test-server-domain-name.com

我希望保留“域”之前的所有内容,因此输出将是:

test-server-

注意:我不能剪切“-”。我必须能够在术语“域”之前进行剪切,因为字符串的格式会有所不同,但“域”将始终存在,并且我始终希望捕获“域”之前的元素。

这在 bash 中可能吗?

小智 7

使用awk:

echo test-server-domain-name.com | awk -F 'domain' '{print $1}'
Run Code Online (Sandbox Code Playgroud)


Ted*_*gmo 6

这将在第一次 domain发现时进行切割:

cutat=domain
fqdm=test-server-domain-name.com

res=${fqdm%%${cutat}*}
echo $res
Run Code Online (Sandbox Code Playgroud)

输出:

test-server-
Run Code Online (Sandbox Code Playgroud)

如果字符串中有多个domains 并且想要剪切最后一个,请改用res=${fqdm%${cutat}*}(one %)。


来自Shell 参数扩展

${parameter%word}
${parameter%%word}
该单词被扩展以产生模式并根据下面描述的规则进行匹配(请参阅模式匹配)。%如果模式与参数扩展值的尾部部分匹配,则扩展的结果是删除了最短匹配模式(大小写)或最长匹配模式(大小写%%)的参数值。如果参数是@*,则模式删除操作依次应用于每个位置参数,并且扩展是结果列表。@如果参数是下标为或 的数组变量*,则模式删除操作将依次应用于数组的每个成员,并且扩展是结果列表。