Bash

從某個點刪除字元

  • February 1, 2021

我想獲取所有用 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

這絕對不是我想要的。誰能給我一個真正有效的命令。

那失敗了,因為tr字元列表作為輸入,而不是字元串。所以echo abc | tr 'bca' 'def'會列印fde,因為它會改變bto an fcto ad和 the ato an e

您可以通過告訴grep不包含您不想要的部分來做您想做的事情(如果您grep支持該-l選項,就像 Linux 上的那樣)或使用可以替換字元串的工具,例如sed

  1. 使用 GNUgrep
ifbash=$(grep -lx '#!/bin/bash' *)
  1. 使用sedorperl或任何其他可以替換字元串的工具
ifbash=$(grep -x '#!/bin/bash' * | sed 's|#!/bin/bash||')

或者

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

請注意,我刪除了該-F選項,因為這裡不需要,我更改IFBASHifbash. 避免在 shell 腳本中使用大寫變數名通常是一個好主意,因為按照慣例,全域環境變數是大寫的,如果您使用已在系統範圍內定義的名稱,可能會導致意外行為。

引用自:https://unix.stackexchange.com/questions/632101