删除一定长度的子字符串

时间:2016-11-18 11:32:19

标签: bash

svn status的调用给了我一个与svn图像不同的文件列表。

D       subs/abc/deleted_sub.f90
M       subs/abc/modified_sub.f90
M       subs/abc/Makefile.Routinen

我需要一个字符compile_stringgmake $compile_string

我不希望在我的字符串中为Ddeleted文件声明Makefile.Routinen的文件。

我也不想使用临时文件(我有一个工作脚本,但不希望使用临时文件)。

所以我把我的svn状态读成一个字符串:

comp_files=$(svn status)

所以我得到一个长字符串D subs/abc/deleted_sub.f90 M subs/abc/modified_sub.f90 M subs/abc/Makefile.Routinen

现在我怎样才能在' D'之后删除下一个文件路径。或者如果是Makefile.Routinen文件?

2 个答案:

答案 0 :(得分:1)

请尝试

comp_files=$(svn status | grep -E -v '^D|Makefile.Routinen')

答案 1 :(得分:1)

使用列

时,

awk非常合适

comp_files=$(svn status | awk '$1 != "D" && $2 !~ /Makefile\.Routinen/{print $2}')
  • $1 != "D"第一列不应与文字字符串D
  • 相匹配
  • $2 !~ /Makefile\.Routinen/第二列不应包含字符串Makefile.Routinen
  • {print $2}如果两个条件都满足,请打印第二列


如果需要整行内容而不是第二列,

comp_files=$(svn status | awk '$1 != "D" && $2 !~ /Makefile\.Routinen/')