如何删除字符串输出的前两个单词

his*_*ere 4 linux bash awk cut sed

我想删除输出字符串中出现的前两个单词.此字符串也在另一个字符串中.

是)我有的:

for servers in `ls /data/field`    
do    
  string=`cat /data/field/$servers/time`
Run Code Online (Sandbox Code Playgroud)

这发送此文本:

00:00 down server
Run Code Online (Sandbox Code Playgroud)

我想删除"00:00 down",以便它只显示"server".

我尝试过使用cut -d ' ' -f2- $string最终只删除命令搜索的目录.

有任何想法吗?

nu1*_*73R 6

使用-d选项将分隔符设置为空格

$ echo 00:00 down server | cut -d" "  -f3-
server
Run Code Online (Sandbox Code Playgroud)

注意使用字段编号3作为计数的开始1而不是0

从手册页

  -d, --delimiter=DELIM
              use DELIM instead of TAB for field delimiter

   N-     from N'th byte, character or field, to end of line
Run Code Online (Sandbox Code Playgroud)

更多测试

$ echo 00:00 down server hello world| cut -d" "  -f3-
server hello world
Run Code Online (Sandbox Code Playgroud)

for循环能够使用通配符遍历文件。所以我会写一些类似的东西

for servers in /data/field*
do    
  string=`cut -d" "  -f3- /data/field/$servers/time`
...
...
Run Code Online (Sandbox Code Playgroud)


Gil*_*not 6

请正确地做事:

for servers in /data/field/*; do
    string=$(cut -d" "  -f3- /data/field/$servers/time)
    echo "$string"
done
Run Code Online (Sandbox Code Playgroud)
  • 反对在2014年被弃用,以支持该表格 $( )
  • 不解析ls输出,glob而是像我一样使用data/field/*

查看http://mywiki.wooledge.org/BashFAQ了解各种主题