2

単純な正規表現を使用した次の bash スクリプトを検討してください。

for f in "$FILES"
do
  echo $f
  sed -i '/HTTP|RT/d' $f
done

このスクリプトは、 で指定されたディレクトリ内のすべてのファイルを読み取り、 orFILESが出現する行を削除します。ただし、正規表現の OR 部分が機能していないようです。つまり、それが含まれているすべての行を削除しますが、両方を削除することはできません'http''RT'sed -i '/HTTP/d' $fHTTPHTTPRT

  1. HTTPまたはを含む行を削除するには、正規表現で何を変更する必要がありRTますか?

前もって感謝します!

4

3 に答える 3

2

それを行う2つの方法(少なくとも):

  1. sed に正規表現を理解させる:

    sed -E -i '/HTTP|RT/d' $f

  2. 各トークンを個別に指定:

    sed -i '/HTTP/d;/RT/d' $f

于 2013-11-13T02:44:18.843 に答える
1

何かをする前に、反対に実行して、削除する予定のものを印刷します。

sed -n -e '/HTTP/p' -e '/RT/p' $f

実際にファイルを変更する前に、削除したいものだけを削除していることを確認してください。

「それはあなたが妄想的かそうでないかの問題ではなく、十分に妄想的かどうかの問題です。」

于 2013-11-13T02:51:08.783 に答える
0

まず、FILES 変数内のすべての WORDS を処理します。

FILES ディレクトリ内のすべてのファイルを実行する場合は、次のようなものが必要です。

for f in $( find $FILES -maxdepth 1 -type f )
do
   echo $f
    sed -i -e '/HTTP/d' -e '/RT/d' $f
done

sed には 2 つの「-e」オプションが必要です。

于 2013-11-13T02:46:17.607 に答える