파일 일치 패턴에서 줄을 찾아 바꾸기

파일 일치 패턴에서 줄을 찾아 바꾸기

나는 여기서 내 삶을 단순화하려고 노력하고 있지만 막혀있습니다. 여러 줄이 포함된 파일이 있습니다. 각 줄에는 사용자와 번호가 있습니다. 사용자를 검색하고 번호를 변경하는 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

관련 정보