String 在bash中的多个空格后获取字符串

String 在bash中的多个空格后获取字符串,string,bash,String,Bash,我需要从头文件中提取一些信息,我需要从如下字符串中获取站点名称: 0008 0080 LO Institution Name Site Name Here 问题是站点名称也包含空格。我想到的唯一有效的方法是将行保存为字符串,然后在一定数量的字符后将站点名称作为字符串,如下所示: 0008 0080 LO Institution Name Site Name Here echo${line:50} 但我想要更优雅的 我刚刚注意到,

我需要从头文件中提取一些信息,我需要从如下字符串中获取站点名称:

0008 0080 LO Institution Name                 Site Name Here
问题是站点名称也包含空格。我想到的唯一有效的方法是将行保存为字符串,然后在一定数量的字符后将站点名称作为字符串,如下所示:

0008 0080 LO Institution Name                 Site Name Here
echo${line:50}

但我想要更优雅的


我刚刚注意到,它还删除了
机构名称
站点名称

之间的多个空格,如果给定的字符串格式不是每次都更改,下面就可以了

A=“0008 0080本地机构名称站点名称”

echo$A | cut-d”“-f 6

如果问题标题代表您的实际问题,并且您希望在多个相邻空格后提取文本

echo "${string##*  }"
星号后面有两个空格将提取一个子字符串,其前缀最长,以从变量值中删除的两个空格结尾

如果需要在管道中执行此操作,则使用
sed

something which produces the output string |
sed 's/.*  //'

我认为awk是一个最佳选择。它可以很容易地提取列

echo '0008 0080 LO Institution Name                 Site Name Here'|awk '{ print $7" "$8 }'

您可以打印您想要的任何列。(并做许多其他事情。)

发布一个更真实的输入字符串(使用真实的sitename)由于忘记引用值,空格将丢失。您需要
回显“${string:50}”
。仅举一个例子,不解释您想要字符串的哪一部分,这是不清楚的。您能否指定需要字符串的哪一部分以及在什么情况下失败?而且,“优雅”这个词的定义也不是很明确——我觉得很难想象你会发现任何比你已经拥有的东西更简单的东西。@tripleee:谢谢你的编辑。我第一次来这里,还不熟悉格式等。我想我所说的优雅是指在一行中完成,而不首先将其保存到变量中,例如,将其输送到sed。您是否希望在长时间运行空格后提取零件?您是否可以验证在出现两个空格时中断是您真正想要的?请参阅添加的注释。“机构名称”和“站点名称”之间有多个空格。即使我使用“将多个分隔符视为一个选项”,这仍然只能从站点名称中获取第一个单词。它可能有两个或多个空格分隔。不幸的是,列编号可能会更改。我需要最后一个单词,但它可以是一个、两个或多个。它们由多个空格与字符串的其余部分隔开。哦,因此sed解决方案似乎是最好的。这将起作用。不同输入之间唯一保持不变的是多个空格。其余的,比如长度、站点名称的开头、前面的字数,都可以改变。我不知道我可以在这个结构中使用多个字符。谢谢嗯,我尝试了
sed
几乎就是这样,只使用
^
作为字符串的开头。显然不起作用…
^
匹配行首,但regex
*
仍然匹配行首的所有内容
sed的/^.*/'
应该也能正常工作。我忘了点。我想,从一开始,
^
一切
*
到双空格
'
都将被零取代
/
。不,在正则表达式中,
*
表示“之前的表达式零次或多次”;而
表示“任何单个字符(换行除外)”。