ファイル拡張子などで条件を絞って全置換するためには、「grep」ではなく「find」を使用

Linuxコマンドfind

内容

 状態:-  閲覧数:380  投稿日:2018-03-27  更新日:2018-03-27

ファイル拡張子などで条件を絞って全置換するためには?


「grep」ではなく「find」を使用

複数あるファイルの中から特定の文字列を一括置換したいときのLinuxコマンド

 閲覧数:201 投稿日:2015-06-14 更新日:2018-03-27 
複数あるファイルの中から特定の文字列を一括置換したいときのLinuxコマンド
・このコマンドは実行したら修正できないので要注意
find ./ -type f | xargs sed -i "s/hoge/fuga/g"

【上記コマンドの説明】
find
find の次で指定したディレクトリ以下のファイルを検索する。
ファイル検索の構文は「find [path] [検索条件] [アクション]」

./
今いるディレクトリ以下が検索対象。「~/」とするとホームディレクトリ以下が検索対象となる。
./ の代わりにフルパスでも可。この場合も指定したディレクトリ以下が検索対象になる。

-type f
指定したファイルタイプを検索する。fが通常ファイルを,cまたはdとするとディレクトリを,lとするとシンボリック・リンクを検索します。

xargs
標準入力からコマンドラインを作成し、それを実行する

sed
文字列の置換,行の削除を行う
sed の基本構文は「sed (オプション) [対象ファイル]」

-i
文字列を挿入する

s/置換条件/置換文字/g
置換条件はこれから置き換えたい、元の文字列。置換文字は置換後の文字列。
最後に g をつけた場合は。置換条件に一致した全ての文字列を置換文字に置き換える。

このコマンドが修正できない理由


・一度このコマンドを実行後、元の文字列または別の文字列に変更したい場合、他の関係のない文字列に干渉してしまう場合があるため

例えば、
「★★☆☆……」を
$ find ./ -type f | xargs sed -i "s/★/☆/g"
で「☆☆☆☆……」に置換。

でもやっぱり元に戻したいので上記の逆をして
$ find ./ -type f | xargs sed -i "s/☆/★/g"
としても、
「★★★★……」
こうにしかならない

つまり、置換先の文字列内容が、予め対象ディレクトリ内にあると元へ戻せなくなる


指定ディレクトリ内の「特定拡張子のファイル」のみ削除 / find の -delete オプションを使用

カレントディレクトリ配下の「指定拡張子ファイル」内に「指定文字列」が含まれているものを検索する



類似度ページランキング
順位 ページタイトル抜粋
1 CentOSで、指定ディレクトリ以下の「ファイル内容」を全文置換 36
2 指定ディレクトリ内の「特定拡張子のファイル」のみ削除 / find の -delete オプションを使用 35
3 CentOSでcpコマンド動作確認するためには、Control + T ではなく、 -v オプションを使用 35
4 「さくらVPS」で、「CentOS6」を「CentOS7」へ変更するためには? 33
5 複数ファイルから日本語を含むファイルを抽出するためには、grep -l -R '[亜-熙ぁ-んァ-ヶ]' . 32
6 /etc/groupでは、「そのグループをプライマリグループとするユーザ名」を確認することは出来ない 32
7 それまで受信できていたcron経由によるメールを、正常受信できなくなった原因 31
8 cronで定期実行しているphpファイルを、コマンドライン経由で即時実行する 31
9 CentOS7コマンドは「/usr/bin/」もしくは「/usr/sbin/」内に格納されているファイルを実行している 31
10 カレントディレクトリ配下の「指定拡張子ファイル」内に「指定文字列」が含まれているものを検索する 30
11 PHP5をインストールしているCentOSで、PHP7も使用したい 30
12 「cron × Cent OS7」でよく使用するコマンド 30
13 Let's Encrypt。証明書取得後、複数ホストを確認するためには? 30
14 英語でmanページを表示するためには「$ LANG=C man ●●」。具体例「$ LANG=C man grep」 29
15 Let's Encrypt の Nginx プラグインで、HTTPS化する対象サブドメインを追加するには 29
16 以前は普通に表示されていたWebサイト表示が、最近とくに遅くなっているので、原因を知りたい1 29
17 以前は普通に表示されていたWebサイト表示が、最近とくに遅くなっているので、原因を知りたい2 29
18 gzip や deflate を使用してリソースを圧縮することで、ネットワークで送信されるバイト数を減らすことができます。 28
19 「/」以下を、index.htmで表示 28
20 CentOSで「指定ディレクトリ下層に複数存在する指定ディレクトリ」内にある全ファイルを削除するシェルスクリプト 28
2021/9/26 19:18 更新
週間人気ページランキング / 9-19 → 9-25
順位 ページタイトル抜粋 アクセス数
1 Nginx設定。エラーログレベル | Nginx(Webサーバ) 16
2 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 15
3 PHPのmb_send_mail関数でメール送信できない | メール処理システム 11
4 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 10
5 tar: これは tar アーカイブではないようです 8
5 ImageMagick と imagick の違い | ImageMagick(ソフトウェアスイート) 8
5 さくらVPS0 8
6 manページ日本語表示 | CentOS 7 (CentOS) 7
6 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 7
7 ABRT により 問題が検出されました | CentOS 7 (CentOS) 6
7 Reached target Shutdown メッセージが表示されたあと、シャットダウンまたは再起動プロセスがハングアップする | CentOS 7 (CentOS) 6
7 PHPファイルでchmodエラー | PHP(プログラミング言語) 6
7 echo と cat の違い 6
8 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 5
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 5
8 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 5
8 「さくらVPS」で、「CentOS6」を「CentOS7」へ変更するためには? | CentOS 7 2週間無料のお試し期間 Link(さくらVPS) 5
9 6回目-10.Nginxでバーチャルホスト設定確認 | CentOS 7 2週間無料のお試し期間 6回目(さくらVPS) 4
9 cronで定期実行しているphpファイルを、コマンドライン経由で即時実行する | cron(Linuxコマンド) 4
9 MySQL 5.5 から 5.6 へのアップグレード | MySQL(データベース) 4
2021/9/26 1:01 更新