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