다음 형식의 파일이 있습니다.
A 485C72F95C72E15C EXTERNAL
B CC32480A3247F84A SYSTEM
C EC2A63F12A63B76C EXTERNAL
변수 'letter'의 값을 사용하여 첫 번째 열의 문자를 제공하고 두 번째 열의 값을 변수 'id'에 제공 한 값으로 바꾸고 싶습니다. 세 번째 열은 어떤 경우에도 다르거 나 일치하지 않을 수도 있습니다. 첫 번째 및 두 번째 열에는 공백이나 특수 문자가 포함되지 않습니다.
를 사용해 보았지만 sed
sed-fu가 강하지 않습니다. 나는 이것을 생각 해냈다.
letter=A
id=MYNEWIDSTRING
sed "/$letter /s/[^ ]*/$id/2"
출력은 다음과 같습니다.
A MYNEWIDSTRING EXTERNAL
B MYNEWIDSTRING SYSTEM
C EC2A63F12A63B76C EXTERNAL
id는 두 줄로 바뀝니다. 이것은 원래 id 문자열의 끝에서 'A'가 일치하기 때문이라고 가정합니다.
sed -i
파일을 제자리에서 편집하는 데 사용 하는 것을 알고 있지만 명령이 여전히 약간 어리석기 때문에 아직 수행하지 않았습니다.
어디에서 잘못 되었습니까? 아니면 다른 방법을 사용해야합니까?
첫 번째 문자 인 경우에만 일치 ^
하도록 고정 ( 줄 시작) A
:
$ letter=A; id=MYNEWIDSTRING; sed "/^$letter /s/[^ ]*/$id/2" file
A MYNEWIDSTRING EXTERNAL
B CC32480A3247F84A SYSTEM
C EC2A63F12A63B76C EXTERNAL
그건 그렇고, 변수를 전달하고 sed
싶지만 강력한 따옴표가 필요한 경우 변수에 큰 따옴표를 추가하는 동안 따옴표를 켜고 끌 수 있다는 것을 기억하십시오-추악하지만 일반적으로 가장 좋은 방법은 다음과 같습니다.
sed '/^'"$letter"' /s/[^ ]*/'"$id"'/2'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다