私の現在のフォルダ名には、次のdetails1
ファイルのリストが含まれています。file1
file2
file3
例:(ここではこれだけを表示しました。file1
他のファイルにも同じ内容が含まれていますfile1
。)
file1:cat file1
href="/de_hecklist/secry/GD/GD10/"
href="/de_hecklist/secry/GT/GT1/"
私のクエリ:
現在のディレクトリ(たとえばfile1
、file2
などfile3
)で複数のファイルを検索して置き換える方法を使用して、各ファイルを開かずに一度に各ファイルを置き換える方法です。
私は以下を試しました。 (各ファイルを開くと適用されます)
:%s/de_hecklist/data/g
:%s/secry/send/g
現在のディレクトリに複数のファイルがある場合、例外出力は次のようになります。
href="/data/send/GD/GD10/"
href="/data/send/GT/GT1/"
答え1
この行が正しい出力を提供する場合
sed -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1
in-place
これで内容を変更できます。-i
sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1
一致するすべてのファイルに対してこれを行うには、次のようにfile?
します。
find . -name 'file?' -type f -exec sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' {} \;
sed
すべてのファイルをパラメータとして渡すこともできます。まず、すべてのフルパスファイル名を提供するコマンドを作成します。
find . -name 'file?' -type f
次に、次に追加しますsed
。
sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' $(find . -name 'file?' -type f)
答え2
この試み:
find -maxdepth 1 -type f -name "file?" -exec sed -i.bak -e 's/de_hecklist/data/g; s/secry/send/g' {} +
-name "file?"
ファイルに一致するパターンに置き換えるか、完全に削除してすべてのファイルを編集できます。
サブディレクトリが入力されておらず、現在のディレクトリで一致するファイルのみが変更されることを示し-maxdepth 1
ますfind
。file?
-i.bak
sed
ファイルをバックアップするオプションがあります。バックアップが不要な場合は削除できます。また、この-i
(--in-place
)オプションはGNUsed
拡張であるため、POSIXと互換性がありませんが、Linuxを使用しているため問題ありません。