Shell脚本子串直到空间

时间:2015-01-28 05:26:20

标签: linux bash

对于能够告诉我如何在测试空格/制表符后面的内容是另一个指定的子字符串后如何将所有字符提取到第一个空格或制表符后,我最有责任?例如,包含

的文件
php server-side
asp server-side
css client-side
html client-side
golang server-side

当逐行读取时可用于生成字符串

php asp golang

即。结束客户端的行完全退出,包含服务器端的行在空格处截断。

5 个答案:

答案 0 :(得分:5)

这个命令可以解决问题,

grep "server-side" filename|cut -d ' ' -f1|tr '\n' ' '

解释如下;

grep "server-side" filename

它只捕获与字符串服务器端匹配的行。

cut -d ' ' -f1

cut命令将通过分隔符空格切割表的第一列。

tr '\n' ' '

tr命令会将所有新行字符替换为空格。

输出正是OP提到的问题(要求):

php asp golang

答案 1 :(得分:3)

如果你的意图是在shell循环中遍历标记,那么shell内置了空格分割。

sep=''
while read -r lang feat; do
    case $feat in "client-side" ) continue;; esac
    printf '%s%s' "$sep" "$lang"   # replace this with something actually useful?
    sep=' '
done <<____HERE
    php server-side
    asp server-side
    css client-side
    html client-side
    golang server-side
____HERE

答案 2 :(得分:2)

通过sed,

$ sed -n 's/[[:space:]]\+server-side$//p' file
php
asp
golang

将输出传递给tr命令是否需要折叠输出。

sed -n 's/[[:spacee$//p' ri | tr '\n' ' '

答案 3 :(得分:1)

grep "server-side" FILE_NAME | awk '{print $1}'

说明: grep&#34;服务器端&#34; FILE_NAME可以过滤掉这些客户端条目。 然后awk&#39; {print $ 1}&#39;只能打印文本的第一行。

答案 4 :(得分:1)

grep server-side foo.txt | cut -d' ' -f1 | paste -s -