私はここで私の人生を単純化しようとしていますが、詰まっています。複数行を含むファイルがあります。各行にはユーザーと番号があります。ユーザーを検索して番号を変更する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
置き換えられます。その後、出力が 。1234
1233
NewFile.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