从某一点删除字符

从某一点删除字符

我想获取所有用 bash 编写的文件,所以我使用这个命令IFBASH=$(grep -Fx #!/bin/bash *) 它有效。

输出:test.sh:#!/bin/bash t test2.sh:#!/bin/bash

所有这些都保存在变量 $IFBASH 中。现在我想删除:#!/bin/bash 所以我用了LIST=$(echo "$IFBASH" | tr -d ':#!/bin/bash')

输出:

   tet.h
   tet2.h

这绝对不是我想要的。有人能给我一个真正有效的命令吗?

答案1

那失败了,因为tr需要一个字符列表作为输入,而不是字符串。因此echo abc | tr 'bca' 'def'将打印,fde因为它将把 更改b为 an f,将 更改c为 a d,将 更改a为 an e

grep您可以通过告诉不包含您不需要的部分(如果您grep支持该选项,如 Linux 上的选项)或使用可以替换字符串的工具来执行您想要的操作-l,例如sed

  1. 使用GNUgrep

     ifbash=$(grep -lx '#!/bin/bash' *)
    
  2. 使用sedorperl或任何其他可以替换字符串的工具

     ifbash=$(grep -x '#!/bin/bash' * | sed 's|#!/bin/bash||')
    

    或者

     ifbash=$(grep -x '#!/bin/bash' * | perl -pe 's|#!/bin/bash||')
    

请注意,我删除了该-F选项,因为此处不需要该选项,并将其更改IFBASHifbash.通常最好避免在 shell 脚本中使用大写变量名称,因为按照惯例,全局环境变量都是大写的,如果您使用已在系统范围内定义的名称,则可能会导致意外行为。

相关内容