Bash
從某個點刪除字元
我想獲取所有用 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
,因為它會改變b
to anf
,c
to ad
和 thea
to ane
。您可以通過告訴
grep
不包含您不想要的部分來做您想做的事情(如果您grep
支持該-l
選項,就像 Linux 上的那樣)或使用可以替換字元串的工具,例如sed
:
- 使用 GNU
grep
ifbash=$(grep -lx '#!/bin/bash' *)
- 使用
sed
orperl
或任何其他可以替換字元串的工具ifbash=$(grep -x '#!/bin/bash' * | sed 's|#!/bin/bash||')
或者
ifbash=$(grep -x '#!/bin/bash' * | perl -pe 's|#!/bin/bash||')
請注意,我刪除了該
-F
選項,因為這裡不需要,我更改IFBASH
為ifbash
. 避免在 shell 腳本中使用大寫變數名通常是一個好主意,因為按照慣例,全域環境變數是大寫的,如果您使用已在系統範圍內定義的名稱,可能會導致意外行為。