GNU/Linux >> Linux の 問題 >  >> Linux

シェル スクリプトを使用してファイルの内容を変更する

*

#! /bin/sh
file=xyz.cfg
addr=$1
port=$2
username=$3
sed -i 's/address=.*/address='$addr'/' $file
sed -i 's/port=.*/port='$port'/' $file
sed -i 's/username=.*/username='$username'/' $file

*

これが初心者にとって理解しやすいものになることを願っています


sed -i 's/something/other/g' filename.txt 

filename.txt をその場で編集し、「something」という単語を「other」に変更します

-i は GNU 拡張機能かもしれませんが、よろしければ、find や xargs などで追加できます。

シェル スクリプトで変更したい場合は、コマンド ラインで引数を取り、それらを番号で参照できます (例:$1)

編集:

私のコメントによると、以下の sudo_O の回答はまさにあなたが望む例です。私が追加するのは、サブディレクトリなどにまたがる複数のファイルでこのような一致を行うことが一般的であるため、find/xargs を理解することで、2 つを組み合わせることができるということです。一連の .cfg ファイルでサブネットを変更する簡単な例:

find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}

find/xargs への -print0/-0 引数 (スペースを含むパス/ファイル名に非常に便利) と、シェルのためにキャプチャブラケットをエスケープする必要があることに注意してください (sudo の例と同じ)


次のようなものはどうですか:

#!/bin/bash

addr=$1
port=$2
user=$3

sed -i -e "s/\(address=\).*/\1$1/" \
-e "s/\(port=\).*/\1$2/" \
-e "s/\(username=\).*/\1$3/" xyz.cfg

どこ $1,$2$3 スクリプトに渡される引数です。 script.sh などのファイルに保存します chmod +x script.sh で実行可能であることを確認してください 次に、次のように実行できます:

$ ./script.sh 127.8.7.7 7822 xyz_ITR4

$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4

これで基本的な構造が得られますが、入力の検証について考えたいと思うでしょう。


Linux
  1. 最も古いファイルを移動するためのシェルスクリプト?

  2. シェルスクリプトで一時ファイルを作成するにはどうすればよいですか?

  3. シェルスクリプトでバッファにデータを追加する方法は?

  1. シェルスクリプトBashでサブストリングをチェックする方法は?

  2. シェル - 変数の内容をファイルに書き込む

  3. シェルスクリプトを使用して、指定されたパターンの後にファイルに複数の行を挿入します

  1. bashスクリプトは、ファイルの最初の行にテキストを追加します.

  2. シェルで .sh 拡張子のないファイルを実行する方法

  3. .sh ファイルがマルウェアになる可能性はありますか?