ファイルマッチパターンで行を見つけて置き換える

ファイルマッチパターンで行を見つけて置き換える

私はここで私の人生を単純化しようとしていますが、詰まっています。複数行を含むファイルがあります。各行にはユーザーと番号があります。ユーザーを検索して番号を変更するbashステートメントを知りたいです。これがどのように可能ですか?よろしくお願いします。

私のファイル構造は次のとおりです。

crmopr 162756
tpiopr 102334
ddnope 210928

- 解決済み -

この一文がその仕事をします。

sed -i '/MATCHING_STRING/s/MATCHING_NUMBER/NEW_NUMBER/1' file

MATCHING_STRING: 数値を変更する行を検索するために使用される文字列

MATCHING_NUMBER:置き換える番号

NEW_NUMBER:新しい番号

/ 1:行の最初の代替一致のみを変更します(この場合は/ gかもしれません)。

-i:変更を永久に適用する

- 編集する -

OPを編集して数秒後に承認されたソリューションも機能します!

答え1

ファイルが次の場合:

abcd 1234
djhd 6534
fytf 4544

次のようにAWK one-linerを実行できます。

index=2;for i in `cat filename`; do echo $i; done|awk -v OFS=" " -v \
INDEX=$index '$1 ~ /^abcd$/ {$2="1233"; print }' >> NewFile.txt

これは名前と一致し、にdddd置き換えられます。その後、出力が 。12341233NewFile.txt

したがって、NewFileには置き換えられた項目が含まれます。すべてのファイル項目を繰り返すようにプログラムできます。

答え2

単純なawk(しかし、この場合はsedが良い)

awk '$1 ~ /^MatchingString$/ {$2 = NEW_NUMBER}1' YourFile > NewFile
  • 正確なパターンマッチングに制限(サブパターン間違った選択を防ぐ)

より一般的です(bash変数コンテンツを使用)

awk -v "User=${UserWanted}" -v "Data=${WantedNumber}" '$1 == User { $2 = Data} 1' YourFile > NewFile

関連情報