2

現在のディレクトリには、いくつかの.txtファイルがあります。これらの.txtファイルで文字列を検索し、その文字列を含む行を削除するスクリプトを作成したいと思います。たとえば、現在のディレクトリのすべての.txtファイルで「start」という単語が含まれるすべての行を削除したいとします。

次のコードを書きましたが、続行する方法がわかりません。

#!bin\bash
files=`find . -maxdepth 1 -name \*.txt`

「while」を使用して各ファイルを調べるにはどうすればよいですか?

4

3 に答える 3

3

簡単: sed -i "s/^.*string.*//" *.txt これにより、各.txtファイルの「文字列」を含む行が削除されます

于 2012-07-21T20:20:09.750 に答える
3

Globsを使用してループ変数を設定する

-maxdepth 1現在のディレクトリで使用する場合、サブディレクトリに再帰することはありません。その場合、ファイルを拡張子と一致させるためだけにfindを使用する必要はまったくありません。代わりにシェルグロブを使用して、ループ構造にデータを入力できます。例えば:

#!/bin/bash

# Run sed on each file to delete the line.
for file in *txt; do
    sed -i '/text to match/d' "$file"
done

これは単純であり、プロセス間でファイル名引数を渡すときに発生する可能性のあるファイル名関連の問題の数を回避します。単純にする!

于 2012-07-21T21:48:58.347 に答える
1

結果をパイプした後、一緒にread使用して各ファイル名を順番に取得しますfind。次に、ファイル名をに渡して、sed関心のある行を削除します。

于 2012-07-21T20:16:42.140 に答える