例:
ファイル1:
Name: abc
Number: 325
Code: 0
ファイル2:
Name: xyz
Number: 578
Code: 0
ファイル3:
Name: ttt
Number: 356
Code: 0
ファイル4:
Name: nnn
Number: 228
Code: 0
ファイル5:
Name: bnb
Number: 434
Code: 0
問題はどう変わるかだ。パスワード到着1提供される数字はい3xxまたは2xx。したがって、File2とFile5は変更されていません。
ファイルには約100行の行がたくさんありますが、これはファイル内の1つの文字列(x行)を置き換える方法の簡単な例ですが、ファイル内の他の文字列(y行)が一致する場合にのみ当てはまります。
答え1
これを行う必要があります。
sed -i 's/^Code: 0$/Code: 1/' $(grep -l '^Number: [23]' File*)
- 部品
sed
が物理的に交換されました - この
grep -l ... File*
セクションには、名前が「File *」と一致し、行または始まるすべてのNumber: 2
ファイルが一覧表示されます。Number: 3
$(...)
コマンド周辺の構成はgrep
次のとおりです。コマンドの置き換えリストされたファイルはgrep
次のように供給されます。sed
答え2
GNUツールの使用:
grep -lxZ 'Number: [23]..' ./File* |
xargs -r0 sed -i 's/^Code: 0$/Code: 1/'
答え3
仮説数字常に前にパスワードとパスワードどんな値でも可能で、以下を使用してくださいsed
。
sed -i '/^Number: [23]/{n;s/^Code: .*$/Code 1/}' File*
内容が一貫している場合、次の行は次のようになります。数字いつもコード0、次のように単純化できます。
sed -i '/^Number: [23]/{n;s/0/1/}' File*
答え4
使用しないでくださいsedソースにリダイレクトするとファイルの内容が破損するため、この操作を実行するときに一時ファイルを作成する必要はありません。代わりに編集する。
ファイル名が[a-zA-Z0-9_-]の範囲にあるとします。
% cat scr.ed
1,$s/Code: 0/Code: 1/
w
q
% cat scr.sh
#!/bin/sh
for file in `grep -l '^Number: [23]' File*`
do
ed -s $file <scr.ed
done
% chmod 755 scr.sh
% ./scr.sh