特定のポイントからの文字の削除

特定のポイントからの文字の削除

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'します。に変更 。に変更 。fdebfcdae

grep不要な部分を含めないように指示するか(Linuxでそのオプションをサポートしている場合)、次のように文字列を置き換えることができるツールを使用して必要なgrep操作を実行できます。-lsed

  1. GNUの使用grep

     ifbash=$(grep -lx '#!/bin/bash' *)
    
  2. 文字列を置き換えることができる他のツールを使用してくださいsedperl

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

    または

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

ここでは対応するオプションは不要なので、削除してに-F変更しました。通常、グローバル環境変数は通常すべて大文字であるため、シェルスクリプトで大文字変数名を使用しないことをお勧めします。幅が広いため、予期しない動作が発生する可能性があります。IFBASHifbash

関連情報